1.一个shell中的系统环境变量只对该shell和其子shell有效
子shell只能继承父shell的属性, 不能更改父shell的属性
查看shell执行情况可以用sh -x a.sh
2.位置变量和特殊变量
$$: 这个程序的PID
$?: 上次命令的执行结果返回值
$0: 参数情况下表示文件名, 命令下表示当前shell
$1: 第一个参数
$*: 返回一个字符串, 所有参数和空格连接起来 "$1 $2 ..."
$@: 返回多个字符串 "$1" "$2" ...
$#: 返回参数个数
3.普通变量导为环境变量
export PATH=$PATH:/usr/local/bin #记住赋值和导出的时候没有$符号
4.读取变量
read name #参数-t(表示等待多少秒输入)等
5.查看变量
set命令查看所有已经定义的变量
env命令查看所有环境变量
6.表达式
expr: 对整数型变量进行算术运算 #变量与操作符之间必须以空格分开, 变量用$
expr `expr 2 + 3` / 5
let: 同expr一样为计算功能, 但与expr相反, 不能用空格分开参数, 变量可以不用$, 但为了统一可以用
let c=2+3
let c=a+b
let c=$a+$b
$((...)): $(($a - $b))
$[...]: $[$a - $b]
7.表达式执行
`cmd`或者$(cmd) #重新开启一个子SHELL去执行
l=`ls /`; echo $l;
8.测试语句(一般不会单独使用, 会配合if, whie等使用)
test: 测试范围整数、字符串、文件
整数:
test $a -[eq|ne|lt|gt|ge|le] $b;
字符串:
test $str1==$str2; test $str1; test -n $str1; test -z $str1; echo $?;
文件:
test -[d|f|x|r|w|a|s] file
以上可以用[]进行简化
如: test -d $file 等价于 [ -d $file ]
test [ -d $dir -o -f $file ] #-o表示逻辑或 -a表示逻辑与
9.控制语句
if语句
1 if [ -d $file ] ; then 2 3 ... 4 5 elif ...; then 6 7 ... 8 9 else 10 11 ... 12 13 fi
for语句
1 #for 变量名 in 名字列表 2 #do 3 # ... 4 #done 5 6 for day in mon tue wed thu fri sat sun 7 do 8 echo $day 9 done
case语句
1 #case 变量 in 2 # 字符串1) 3 # ... 4 # ;; 5 # 字符串n) 6 # ... 7 # ;; 8 # esac 9 10 case $op in 11 c) 12 echo 'c';; 13 d) 14 echo 'd';; 15 *) 16 echo '*'17 esac
while语句
1 #while 条件 2 #do 3 # 命令 4 #done 5 6 while [ -d /etc ] 7 do 8 ls -ld /etc 9 done 10 11 num=1 12 while [ $num -le 10 ] 13 do 14 sum=`expr $num \* $num` 15 echo $sum 16 num=`expr $num + 1` 17 done
until语句
1 #until 条件 2 #do 3 # 命令 4 #done 5 6 until [ -x /etc/inittab ] 7 do 8 /bin/ls -l /etc/inittab 9 exit 0 10 done 11 12 read input 13 until [ "$input" == "Y" ] || [ "$input" == "y" ] 14 do 15 echo "Error" 16 read input 17 done
break, continue跳出循环
shift指令: 参数左移, 每执行一次, 参数序列顺序依次左移一个位置, $#的值减1; 用于分别处理每个参数, 移出去的参数不可再用;
1 if [ $# -le 0 ]; then 2 echo 'Not enough parameters' 3 exit 0 4 fi 5 6 sum=0 7 while [ $# -gt 0 ] 8 do 9 sum=`expr $sum + $1` 10 shift 11 done 12 echo $sum
函数的定义
1 #函数吗() { 2 # 命令 3 #} 4 5 #函数的调用不带() 6 #函数名 参数1 参数2 7 8 #函数中的变量 9 #变量均为全局, 没有局部变量 10 11 help() { 12 echo 'abcd' 13 } 14 15 调用: help
完