shell中的常用语句
$0 ##表示脚本本身
$1可以是个命令
$1 "命令"
for语句
for x in {1..7}/1,3,5/`seq 1 4`/`seq 1 2 10`
do
done
seq 中间的是步长(差)
sleep 1 ##一秒变一次
eg:
echo -n $t
echo -ne "\r"
sleep 1 ##实现一秒变一次且不换行;倒计时效果
while语句
当条件成立做什么
while true
do
done
until语句
until false
do
done
只有条件不满足时才跳出循环
if语句
if
then
elif
then
elif
then
...
else ##以上情况都不符合
fi
case语句
case $1 in
xx|xx)
action1
;;
xx)
action2
;;
*)
last action
esac
expect语句
expect 是自动应答器,自动应答命令用于交互式命令的自动执行
spawn 是 expect 中的监控程序,其运行后会监控命令提出的
交互问题
send:发送问题答案给交互命令
"\r"表示回车
exp_continue 表示当问题不存在时继续回答下面的问题
expect eof 表示问题回答完毕退出 expect 环境
interact 表示问题回答完毕留在交互界面
set NAME [ lindex $argv n ]定义变量
vim ask.sh
#!/bin/bash
read -p "what's your name: " NAME
read -p "How old are you: " AGE
read -p "Which class you study: " CLASS
read -p "You feel happy or terrible ?" FEEL
echo $NAME is $AGE\'s old and $NAME is feel $FEEL
chmod +x ask.sh
./ask.sh <<EOF
>xx
>xx
>xx
>xx
>EOF
##也可以得到回应
vim ask.exp
#!/usr/bin/expect
set NAME [ lindex $argv 0 ]
spawn /ask.sh
expect {
"*name:" { send "$NAME\r" ; exp_continue}
"*old*" { send "18\r" ; exp_continue }
"*study:" { send "linux\r" ; exp_continue }
"*feel*" { send "happy\r"}
}
expect eof
set xxx [lindex $argv 0] ##定义一个变量xxx为xx.exp后跟的第一个字符
set xxx [lindex $argv 1]
set timeout 5 ##等待5s应答,不回应就跳过
将expect整合到shell环境
vim ask_exp.sh
#!/bin/bash
/usr/bin/expect <<EOF
set NAME [ lindex $argv 0 ]
spawn /ask.sh
expect {
"*name:" { send "$NAME\r" ; exp_continue}
"*old*" { send "18\r" ; exp_continue }
"*study:" { send "linux\r" ; exp_continue }
"*feel*" { send "happy\r"}
}
expect eof
EOF
脚本中的语句控制器
exit n ##脚本退出,退出值为 n
break ##退出当前循环
continue ##提前结束循环内部的命令,但不终止循环
otehers
ctrl+v+m = ^M ##unix下换行符 ^M 的拼写
a||b&&c ##a不成立的情况下执行b,b成功的情况下执行c