1.编写脚本,要求如下:
在编写脚本时,尽量将函数定义放在脚本的开头,不能将函数的定义放在脚本的最后,否则会读取不到函数;
2.for 语句:
结构:
for 定义变量
do 使用变量,执行动作
done 结束标志
格式1:
#!/bin/bash
for WESTOS in `seq 2 2 10` #开始为2,结束为10(包含10),部长是2;即10以内的偶数
do
echo $WESTOS
done
格式2:
for WESTOS in 1 2 3(westos linux lin)
do
echo $WESTOS
done
格式3:
for WESTOS in {
10..1} (从10到1)
do
echo $WESTOS
done
格式4:
for ((WESTOS=0;WESTOS<10;WESTOS++))
do
echo $WESTOS
done
补充:seq命令:用于产生从某个数到另外一个数之间的所有整数
语法:
seq [选项]… 尾数
seq [选项]… 首数 尾数
seq [选项]… 首数 增量 尾数
参数:
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同
脚本编写:
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通常
如果网络通常请显示主机的ip列表
脚本编写:
create_user_file.sh 加文件usernamefile 加文件userpasswd
用户存在就提示,不存在就创立;
3.while语句和until语句:
while :
while ture #条件为真
do #条件成立所作循环动作
done
until :
until false ##条件为假
do
#条件不成立所作循环动作
done
在while语句和until语句的执行块(do)中,需要有控制变量的条件,否则会无限循环:
while 语句输出99乘法表:
until 语句输出99乘法表:
4.if 语句:
if
then
elif
then
...
else
fi
脚本练习:
check_file.sh
please input filename: file
file is not exist
file is file
file is direcory
此脚本会一直询问直到用户输入exit为止
if 语句会从上到下执行判定多次,直到判定到符合条件的语句(判定机制,yes和no)
case 语句只判定一次(点名机制)
5.case语句:
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac
脚本练习:
system_watch.sh disk memory upload (每秒显示)
disk 监控磁盘使用情况
memory 监控内存使用情况
upload 监控启动负载
6.expect语句:
问题脚本
#!/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 study $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 FEEL [ lindex $argv 3 ]
spawn /mnt/ask.sh
expect {
"name" {
send "$NAME\r";exp_continue }
"old" {
send "$AGE\r";exp_continue }
"objective" {
send "$OBJ\r";exp_continue }
"ok" {
send "$FEEL\r" }
}
expect eof
将应答脚本写入shell:
#!/bin/bash
echo hello westos
/usr/bin/expect <<EOF
spawn /mnt/ask.sh
expect {
"name" {
send "$1\r";exp_continue }
"old" {
send "$2\r";exp_continue }
"objective" {
send "$3\r";exp_continue }
"ok" {
send "$4\r" }
}
expext eof
脚本练习:
host_list.sh
检测172.25.254.1-172.25.254.10网络是否开启
如果开启,生成解析列表如下:
ip hostname
如: 172.25.254.1 westos_Student1.westos.org
7.break,continue,exit控制器:
“$ ?” 表示退出值,正确的结果输出或exit后的退出值都为0;
continue ##终止当此次前循环提前进入下个循环
break ##终止当前所在语句所有动作进行语句外的其他动作
exit ##脚本退出