全部博文(11)
分类: LINUX
2013-05-14 23:25:36
一、Shell的默认变量:
1)$#:传入脚本的命令行的参数个数
2)$*:所有命令行参数值,在各个参数值之间留有空格
3)$0:命令本身(shell文件名)
4)$1:第一个命令行参数
5)$2:第二个命令行参数
5) $n:第n个命令行参数
例如: #!/bin/sh
echo '$* = ’ $*
echo '$# = ’ $#
echo '$0 = ’ $0
echo '$1 = ’ $1
echo '$2 = ’ $2
echo '$3 = ’ $3
echo '$4 = ’ $4
执行这个脚本:在命令行输入 ./ssh 2 3 4 txt
运行结果: $* = 2 3 4 txt
$# = 4
$0 = ./ssh
$1 = 2
$2 = 3
$3 = 4
$4 = txt
注:单引号、双引号和反引号在脚本中的区别:
单引号(‘’)用于保持在引号内的每个字符的字面值。
双引号保持引号内的所有字符的字面值,除了$,``,\
反引号(``)数字键1左边的那个:反引号内作为一个系统命令并执行(作为shell命令被执行)
例如:1)单引号会屏蔽 $ 的取值功能。# echo '$PATH'$PATH
2)双引号则不会。# echo "$PATH"/etc
3)倒引号表示优先执行。下例即是先执行echo命令,然后将结果赋值myPath#myPath=`echo
$PATH`# echo $myPath/etc否则# myPath=echo $PATH这样会报错,因为shell命令解析
是根据空格“分割重组”的。先分割成myPath=echo和$PATH,然后做变量替换,$PATH被
替换为/etc,最后重组变成:myPath=echo /etc。显然/etc不是一个命令,因此会报错
二、条件测试test与[ ]:
可以用test或者[]测试一个条件是否成立,如果测试结果为真,则该命令推出状态为0,为假,状态为1.
格式:test option file 或者 [ option file ]
-b file 块文件
-c file 字符文件
-d file 目录
-e file 存在
-p file 管道
-s file 大于0
-r file 可读
-w file 可写
-x file 可执行
-a 逻辑与,操作符两边都为真,结果为真,否则为假。
-o 逻辑或,操作符两边有一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真,条件为真,结果为假。
例如:1)判断/bin/下是否存在ls 和 lv
#!/bin/sh
[ -e /bin/lv ] && echo yes || echo no
test -e /bin/ls && echo YES || echo NO
运行结果:no
YES
2) #!/bin/sh
#判断/bin/ls 是否存在 与 /bin/ls 是否可执行
[ -e /bin/ls -a -x /bin/ls ] && echo yes || echo no
#判断/bin/ls是否是目录 或 /bin/ha 是否存在
test -d /bin/ls -o -e /bin/ha && echo YES || echo NO
运行结果:yes
NO
三、if 语句判断语句:
1)但分支:if [ expression ] 或者 if [ expression ];then
then #code block
#code block fi
fi
例如: #!/bin/sh
if [ '3' -eq '3' ]
then
echo yes
fi
运行结果:yes
注: 相同 -eq
不同 -ne
大于 -gt
小于 -lt
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
2)双分支: if [ expression ]
then
#code block
else
#code block
fi
3)多分支: if [ expression ] 或 if [ expression ]
then then
#code block #code block
else if [ expression ] elif [ expression ]
then #code block
#code block elif [ expression ]
else then
#code block #code block
fi else
fi #code block
例如:1)#!/bin/sh fi
read tmp
if [ "$tmp" -eq '2' ]
then
echo "tmp is 2"
else if [ "$tmp" -eq '3' ]
then
echo "tmp is 3"
else
echo ha
fi
fi
运行结果 在执行脚本是输入在键盘上输入一个数字
注:read 是读入
2)#!/bin/sh
read T
if [ "$T" -lt "10" ] ;then
echo " T < 10"
elif [ "$T" -le "20" -a "$T" -ge "10" ] ;then
#[]中应该使用-a -o 而不是使用&& ||
echo " T >= 10 && T <= 20 "
elif [ "$T" -ge '20' ]
then
echo " T > 20"
else
echo haha
fi
运行结果:自己验证!!