流程控制语句
if/else命令
1.单分支if条件语句
if [ 条件判断式 ]
then
程序
fi
或者
if [ 条件判断式 ];then
程序
fi
eg:#!/bin/sh
if [ -x /etc/rc.d/init.d/httpd ]
then
/etc/rc.d/init.d/httpd restart
fi
单分支条件语句需要注意的点:
if语句使用fi结尾,和一般语言使用大括号结尾不同
[ 条件判断式 ] 就是使用test命令判断,所以中括号和条件判断式之间必须有空格
then 后面跟符号条件之后执行的程序,可以放在[]之后,用";“分割,也可以换行写入,就不需要”;"了
2.多分支if条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
…省略更多条件
else
当所有的条件都不成立时,最后执行此程序
fi
示例:
read -p “please input your name :” NMAE
eg:
#!/bin/bash
read -p “pelease input your name :” NAME
#echo $NAME
if ["$NMAE" == root ]
then
echo “hello ${NAME},welcome!”
elif [ $NAME == tom ]
then
ehco “hello ${NAME},welcome!”
else
echo “SB,get out here !”
fi
case命令
case命令是一个多分支的if/else命令,case变量的值用来匹配value1,value2,value3等等。匹配到后则执行跟在后面的命令直到遇到双分号为止 (;????,case命令以esac作为终止符。
格式
CMD=$1
case $CMD in
start)
echo “starting”
;;
Stop)
echo “stoping”
;;
*)
echo “Usage:{start|stop}”
esac
for循环
for循环命令是用来在一个列表头目中执行有限次数的命令。比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done命令,第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量,依次类推,直到字符串列表遍历完成。
第一种:
for B in 1 2 3
do
echo $N
done
或
for N in 1 2 3 ; do echo $N;done
或
for N in {1…3}; do echo $N;done
第二种
for(( i=0;i <= 5 ; i++ ))
do
echo "welcome $i times "
done
或
for(( i = 0 ; i <= 5 ; i++ )); do echo “welcome $i times”; done
while循环
while命令根据紧跟其后的命令来判断是否执行while循环,当command执行后的返回值为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得大返回值为非0,则终止while循环。
第一种
while expression
do
command
…
done
练习:求1-10各个数的平方和
第二种
自定义函数
函数代表着一个或一组命令的集合,表示一个功能模块,常用于模块化编程。
以下是关于函数的一些重要说明:
在shell中,函数必须先定义,再调用
使用return value来获取函数的返回值
函数在当前shell中执行,可以使用脚本中的变量。
函数的格式如下:
函数名()
{
命令1…
命令2…
return 返回值变量
}
[ function ] funname [()]
{
action;
[return int;]
}
function start() / function start / start()
eg:
注意:
如果函数名后面没有(),在函数名和{ 之间,必须要有空格以示区分。函数返回值,只能通过$? 系统变量获得,可以显示加:return返回值,如果不加,将最后一条命令运行结果,作为返回值,return后跟数值n(0-255)
脚本测试
sh -x script
这将执行该脚本并显示所有变量的值
在shell脚本里添加
set -x 对部分脚本调试
sh -n script
不执行脚本知识检查语法的模式,将返回所有错误语法