1.for语句
-
作用
为循环执行动作 -
for语句结构
for 定义变量
do 使用变量,执行动作
done 结束标志 -
for语句的基本格式
-
格式1:
#!/bin/bash
for WESTOS in $(seq 1 2 10) #1到10步长为2
do
echo $WESTOS
done
-
格式2:
for WESTOS in westos linux lee
do
echo $WESTOS
sleep 1 #每循环一次休眠一秒
done
-
格式3:
for WESTOS in {1…3}
do
echo $WESTOS
sleep 1
done
-
格式4:类似于C语言的方式
for ((WESTOS=0;WESTOS<10;WESTOS++))
do
echo $WESTOS
sleep 1
done
-
脚本练习:
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通畅
如果网络通畅请显示主机的ip列表
2.条件语句
(1) while…do语句
- 作用:
条件为真执行动作 - 语句结构
while ture #条件为真
do #条件成立所作循环动作
done #结束
(2) until…do语句
- 作用:
条件为假执行动作 - 语句结构
until false #条件为假
do #条件不成立所作循环动作
done #结束
(3) if…then…elif…then…else…fi语句
-
作用:
多次判定条件执行动作 -
代码结构
if #首次判断
then #条件成立执行动作
elif #当首次判定不成立时再次判定
… #elif可以书写多次
else #所有条件不成立执行动作
fi #结束 -
练习:
check_file.sh
please input filename: file
file is not exist
file is file
file is direcory
此脚本会一直询问直到用户输入exit为止
3.case语句
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac
- 练习:
system_watch.sh disk memory upload (每秒显示)
disk 监控磁盘使用情况
memory 监控内存使用情况
upload 监控启动负载
- 测试
- sh system_watch.sh disk
- sh system_watch.sh memory
- sh system_watch.sh upload
4.expect
dnf install expect -y
问题脚本:
#!/bin/bash
read -p “what’s your name:” NAME
read -p “How old are you:” AGE
read -p “Which objective:” OBJ
read -p “Are you ok?” OK
echo $NAME is $AGE’s old stady $OBJ feel $OK
应答脚本:
#!/usr/bin/expect
set timeout 1
set NAME[ lindex $argv 0 ]
set AGE[ lindex $argv 1 ]
set OBJ[ lindex $argv 2 ]
set OK[lindex KaTeX parse error: Expected '}', got 'EOF' at end of input: … "name" {send "NAME\r";exp_continue}
“old” {send “KaTeX parse error: Can't use function '\r' in math mode at position 4: AGE\̲r̲";exp_continue}…OBJ\r”;exp_continue}
“ok” {send “$OK\r”;exp_continue}
}
expect eof
- 脚本练习:
host_list.sh
检测172.25.254.1-172.25.254.10网络是否开启
如果网络正常请生成解析列表hosts_list
格式如下
ip 主机名称
例如:
172.25.254.1 westos_studen1.westos.org
5.break,continue,exit
continue #终止当此次前循环提前进入下个循环(跳出单次循环)
break #终止当前所在语句所有动作进行语句外的其他动作(影响的是当前所在的循环)
exit #脚本退出
$0返回值所表示的大概含义:
0 表示成功
2 权限拒绝
1~125 表示运行失败,脚本命令,系统命令错误或参数传递错误
126 找到该命令,但是无法执行
127 为找到要运行的命令
128 命令被系统强制结束
$0的返回值可以自己设定: