分类:
2009-02-13 16:04:08
#cat test.sh
# this is test script
# this is test script 脚本说明
echo “hello everybody!” 脚本中执行的bash命令
hello everybody!
如:abc=123456789 ss=” 4567 “
注:其中su - -c "date",这是调用root用户环境来执行date命令
数值比较:
-eq:等于则为真 "-eq ="
-ne:不等于则为真 "–ne <"
-gt:大于则为真 "-gt >"
-ge:大于等于则为真 "–ge >="
-lt:小于则为真 "–lt <"
-le:小于等于则为真 "-le =<"
字符串比较:
!=:不相等则为真
-z字符串:字符串长度伪则为真
-n字符串:字符串长度不伪则为真
文件测试
-e文件名:如果文件存在则为真
-r文件名:如果文件存在且可读则为真
-w文件名:如果文件存在且可写则为真
-x文件名:如果文件存在且可执行则为真
-s文件名:如果文件存在且至少有一个字符则为真
-d文件名:如果文件存在且为目录则为真
-f文件名:如果文件存在且为普通文件则为真
-c文件名:如果文件存在且为字符型特殊文件则为真
-b文件名:如果文件存在且为块特殊文件则为真
if条件语句
shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:
if条件命令串
then
条件为真时的命令串
else
条件为假时的命令串
fi
if [ $1 = ” ” ];then 注:[ ] 两边有空格
echo “没有参数输入”
echo “$1”
fi
for循环
for循环对一个变量的可能的值都执行一个命令序列。赋给变量的几个数
值既可以在程序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for循环的一般格式为:
for变量名
[in数值列表]
do
若干个命令行
done
变量名可以是用户选择的任何字符串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。如果省略了in,则变量var的取值将是位置参数。对变量的每一个可能的赋值都将执行do和done之间的命令列表。
#! /bin/sh
for aaa in `cat /etc/passwd|awk -F ":" '{print $1}'`
while和until循环
while和until命令都是用命令的返回状态值来控制循环的。While循环的
一般格式为:
while
若干个命令行1
do
若干个命令行2
done
只要while的“若干个命令行1”中最后一个命令的返回状态为真,while
[root@openvz ~]# cat test.sh
#! /bin/sh
#sum 1+2+3................+100
while true
j=`expr $j + $i`
i=`expr $i + 1`
if [ $i = 101 ]
[root@openvz
~]#
until命令是另一种循环结构,它和while命令相似,其格式如下:
until
若干个命令行1
do
若干个命令行2
done
until循环和while循环的区别在于:while循环在条件为真时继续执行
Shell还提供了true和false两条命令用于建立无限循环结构的需要,
它们的返回状态分别是总为0或总为非0
case条件选择
if条件语句用于在两个选项中选定一项,而case条件选择为用户提供
了根据字符串或变量的值从多个选项中选择一项的方法,其格式如下:
case string in
exp-1)
若干个命令行1
;;
exp-2)
若干个命令行2
;;
……
*)
其他命令行
esac
shell通过计算字符串string的值,将其结果依次和表达式exp-1、exp-2
它下面的命令直到遇到一对分号(;;)为止。
在case表达式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。通常
Echo $"Usage: $0 {start|stop|restart}"
esac
无条件控制语句break和continue
break用于立即终止当前循环的执行,而contiune用于不执行循环中
[root@openvz /]# cat test.sh
declare -a CC
CC[0]="redflag "
CC[4]="linux CO."
for i in "${CC[@]}"
echo "$i "
#! /bin/sh
for i in `seq 0 20
#! /bin/sh
for i in `echo { a..z}`
#! /bin/sh
for i in `echo { A..Z}`
#! /bin/sh
while [ $i -le 20 ]