tokens关键字指的是:将你输入的命令拆成不能在拆的时候一步步开始检查
eval相当于执行两次 第一次是进行替换,第二次是作为命令去执行
1.eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量
例如:
test.txt内容:hello shell world!
myfile="cat test.txt"
(1)echo $myfile #result:cat test.txt
(2)eval $myfile #result:hello shell world!
从(2)可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令
2、shell初始化过程及文件
登录shell和非登录shell
Shell启动配置文件的区别
/etc/profile:配置全局环境变量(变量和函数,别名),影响所有用户
~/.bash_profile :配置个人环境变量,影响一个用户
/etc/bashrc :配置全局的别名或者函数,影响所有用户
~/.bashrc :配置个人别名或者函数,影响一个用户(rc指的是:running config---》运行哪些配置)
在用户家目录下,每个用户都有的配置文件,只对单独的用户有效。 (局部地区配置文件)
.bash_profile:用户每次登录时执行 --->.bashrc
.bashrc:每次进入新的Bash环境时执行(打开终端),定义别名 ---->/etc/bashrc
.bash_logout:用户每次退出登录时执行
.bash_history 保存上次用户注销前使用的命令
1 、 bash student_name.sh 和 ./student_name.sh(这两个是开启一个子bash进程来执行)
2、 . student_name.sh 和 source student_name.sh (这两个是在当前bash里执行)
4、产生子进程的四种方式
1:&,提交后台作业
2:管道 |
3:括号命令列表 ()操作符
4:执行外部脚本、程序 bash
五、位置变量
预定义变量
$#:命令行中位置变量的个数
$*:所有位置变量的内容(较少使用)
$@:所有位置变量的内容
$0:当前执行的脚本文件名
$$ :当前shell的PID值, echo $$; ps $$, 常用作临时变量的后缀
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$RANDOM :随机数,可以作为临时文件名
touch abc$RANDOM.txt
脚本里位置变量传递到函数的自增方法:
((n++))
((++n))
let n++
let ++n
例如:使用for循环将所有的位置变量赋值给脚本里的变量
y=1
for i in $*
do
eval num$y=$i
((y++))
done
间接引用
[root@localhost lianxi]# a=10
[root@localhost lianxi]# b=a
[root@localhost lianxi]# echo b
b
[root@localhost lianxi]# echo ${!b}
10
[root@localhost lianxi]#



