1.if语句
可以判断,按上下先后顺序依次对比脚本内参数
格式:
if
then
elif
then
else
fi
例:使用if语句的格式写判断性脚本。
执行checkfiletype.sh
提示please input filename :
判断输入的文件是否存在,存在的话,属于目录,文件,链接的哪一种
不存在就显示 is not exist
并继续提示Please input filename
直到输入exit(大小写都退出,不能使用tr,因为还要判断这个真实文件的类型)
if [ -L "$FILE" ]
then
echo "$FILE is softlink file"
elif [ -f "$FILE" ]
then
echo "$FILE is common file"
elif [ -d "$FILE" ]
then
echo "$FILE is direcotry!!"
else
echo $FILE is not exist!
脚本功能的检测:
######################################
2.for语句
赋予变量一个范围
for in
do
done
例:使用for 语句制作一个 10 s 的倒计时。
for SEC in {10..1}
do
echo -n $SEC is end
echo -ne " \r"
sleep 1
done
脚本功能测试:
###############################
3.which 语句
知道什么条件再做什么
格式
while
do
done
例:结合for语句和which语句,编写一个倒计时一分十秒的脚本。
SEC=10
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
while [ "$SEC" = "0" ]
do
echo -ne "$MIN:$SEC is end"
echo -ne " \r"
sleep 1
SEC=59
((MIN--))
done
while [ "$SEC" = "0" -a "$MIN" = "0" ]
do
exit 0
done
echo -ne "$MIN:$SEC is end"
echo -ne " \r"
sleep 1
done
脚本功能的检测:
###############################################
4.case 语句
if是按上下顺序依次判断,case是,并列判断,哪个条件符合调用哪个
格式
case
word1)
action1
;;
word2)
action2
;;
....
action_last
esac
例:编写脚本westos.sh 输入dog显示cat,输入cat显示dog,输入其他其他报错。
先用if语句写:
if [ "$1" = "dog" ]
then
echo cat
elif [ "$1" = "cat" ]
then
echo dog
else
echo Error
fi
用 sh -x 运行脚本,可以看到if语句的脚本逐层依次判断
使用case语句,写一个相同作用的脚本,westos1.sh
case $1 in
dog)
echo cat
;;
cat)
echo dog
;;
*)
echo Error
esac
使用 sh -x 运行脚本,可以发现,case只做一次判断
###################################
5.expect 语句
expect是自动应答命令用于交互式命令的自动执行
yum install expect
编写问题脚本
编写自动回答脚本
幻数不一样
spawn是expect中的监控程序,其运行后会监控命令提出的交互问题;
send 发送问题答案给交互命令
“\r” 表示回车
exp_continue 表示当问题不存在时继续回答下面的问题
expect eof 表示问题回答完毕退出expect环境
interact 表示问题回答完毕留在交互界面
set NAME [ lindex $argv n ] 定义变量 0 表示第一个
例:编写一个需要回答问题的脚本。
编写expect 自动交互回答脚本
#!/usr/bin/expect
set NAME [ lindex $argv 0 ]
set AGE [ lindex $argv 1 ]
set STUDY [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/ques.sh
expect {
"name" { send "$NAME\r";exp_continue }
"old" { send "$AGE\r";exp_continue }
"study" { send "$STUDY\r";exp_continue }
"ok" { send "$FEEL\r" }
}
expect eof
执行交互脚本回答问题
注释调问题脚本的一个问题后,再次执行交互脚本回答
####################################
6.exit , break , continue
控制语句
exit 脚本直接退出
break 退出当前循环;后面的还要执行
continue 提前结束循环内部的命令,但不终止循环
例:编辑实验脚本,不加 exit , break ,continue 等参数的情况下执行
添加参数 exit 后 ,脚本执行会在exit 的时候退出,后面的脚本命令不再继续执行
将参数 exit 改换成 break 后, 执行脚本,for语句内的会停止执行,单for语句外的继续执行
将参数 break 改换成 continue ,将提前终止循环内的命令,但不会终止循环