1.for语句
格式:
for i in 1 2 3 //i一次取值1,2,3
for i in {1..3} //i一次取值1,2,3
for i in `seq 1 10` //i从1到10,每次加1(默认值)
for i in `seq 1 2 10` //i从1到10,每次加2
for((i=1;i<10;i++)) //与c语言类似,只是变成了(())
do
echo $i
done
for语句示例:
for NAME in westos linux 666
do
echo $NAME
done
2.while语句
格式:
while 条件
do
done
例1:与c语言类似
#!/bin/bash
read -p "please input a data: " WORD
while(("$WORD"<3))
do
echo "$WORD<3"
((WORD=$WORD+1))
done
例2:
#!/bin/bash
while true //成立--不成立(false)
do
clear //清屏
uptime
sleep 5 //睡眠5秒;每5秒执行一次uptime
done
每5秒执行一次,while后的条件一直成立
3.if 语句
格式: 类比c语言
if //条件1
then
elif //条件2
then
else //其他条件
fi
例1:
if [ "$1" == "linux" ]
then
echo linux
elif [ "$1" == "westos" ]
then
echo westos
else
echo bey
fi
例2:
建立文件userfile中的用户,密码在文件passwdfile中
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Error: please input tow files following srcipt!"
elif [ ! -e $1 ]
then
echo "Error: $1 is not exits!"
elif [ ! -e $2 ]
then
echo "Error: $2 is not exits!"
else
Num=`awk 'BEGINN=0}{N++}END{print N}' userfile`
for I in `seq 1 $Num`
do
USERNAME=`sed -n ${I}p userfile`
PASSWD=`sed -n ${I}p passwdfile`
useradd $USERNAME
echo $PASSWD | passwd --stdin $USERNAME > /dev/null
echo $USERNAME is created
done
fi
4.case 语句
格式:
case
word1 )
action1
;;
word2)
action2
;;
........
*)
action_last
esac
列1:
#!/bin/bash
case $1 in
1) //$1=1时,输出a
echo a
;;
2) //$1=2时,输出b
echo b
;;
*) //$1不等于1或2时,输出c
echo c
esac
5.expect
expect | 是自动应答命令用于交互式命令的自动执行 |
---|---|
spawn | 是 expect 中的监控程序,其运行后会监控命令提出的交互问题 |
send | 发送问题答案给交互命令 |
“\r” | 表示回车 |
exp_continue | 标示当问题不存在时继续回答下面的问题 |
expect eof | 标示问题回答完毕退出 expect 环境 |
interact | 标示问题回答完毕留在交互界面 |
set NAME [ lindex $argv n ] | 定义变量 |
expect命令需要安装expect
例1:
vim ask.sh
#!/bin/bash
read -p "What's your name: " NAME
read -p "How old are you: " AGE
read -p "Which object you study: " OBJ
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old study $OBJ feel $FEEL
//执行时:输入一次执行一次,不能实现自动执行
例2: 例1交互时每次都需要输入,比较麻烦,为实现自动交互,使用expect
vim ask.sh
#!/bin/bash
read -p "What's your name: " NAME
read -p "How old are you: " AGE
read -p "Which object you study: " OBJ
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old study $OBJ feel $FEEL
vim answer.exp
#!/usr/bin/expect
spawn sh /mnt/ask.sh
expect "name"
send "ylz\r"
expect "old"
send "21\r"
expect "object"
send "linux\r"
expect "happy"
send "sad\r"
expect eof
例3: 例2的交互时固定的,在文件中,不方便更改
vim answer.exp
#!/usr/bin/expect
set NAME [ lindex $argv 0 ]
set AGE [ lindex $argv 1 ]
set OBJ [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn sh /mnt/ask.sh
expect {
"name" { send "$NAME\r" ; exp_continue }
"old" { send "$AGE\r" ; exp_continue }
"object" { send "$OBJ\r" ; exp_continue }
"happy" { send "$FEEL\r" }
}
expect eof
6.脚本中的语句控制器
exit | 脚本退出 |
---|---|
break | 退出当前循环 |
continue | 结束当前循环,进入下一次循环 |
结合c语言理解,基本一样
(1)exit
(2)break
(3)continue