Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组
                                            case多分支语句
case语句的结构:
针对变量的不同取值,分别执行不同的命令列
成都创新互联公司专注于企业成都全网营销、网站重做改版、沅江网站定制设计、自适应品牌网站建设、H5开发、商城建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为沅江等各大城市提供网站开发制作服务。
case  变量值  in
模式1)
    命令序列1
        ;;
模式2)
    命令序列2
    ;;
.....
*)
默认命令序列
esac
示例:
字符类型识别:
- 提示用户输入一个字符;
- 判断出该字符是字母、数字或者其他字符。
脚本如下:
[root@localhost opt]# vim test01.sh
#!/bin/bash
read -p "请输入一个字符:" key
case $key in
[a-z]|[A-Z])
        echo "你输入的是字母"
;;
[0-9])
        echo "你输入的是数字"
;;
*)
        echo "你输入的是特殊符号"
esac执行结果如下:
[root@localhost opt]# chmod +x test01.sh 
[root@localhost opt]# ./test01.sh 
请输入一个字符:3
你输入的是数字
[root@localhost opt]# ./test01.sh 
请输入一个字符:d
你输入的是字母
[root@localhost opt]# ./test01.sh 
请输入一个字符:#
你输入的是特殊符号
[root@localhost opt]# 循环语句
for循环语句:
循环结构:读取不同的变量值,用来逐个执行同一组命令。
for  变量名  in  取值列表
do
    命令序列
done
示例1:
批量添加用户:
- 用户名存放在users.txt文件中,每行一个;
- 初始密码均设为123456;
- 验证脚本。
具体实验如下:
[root@localhost opt]# tail -5 /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
jiang:x:1000:1000:jiang:/home/jiang:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost opt]# vim users.txt
[root@localhost opt]# cat users.txt 
zhangsan
lisi
wangwu
zhaoliu
[root@localhost opt]# vim test02.sh
[root@localhost opt]# cat test02.sh                                         //shell脚本如下
#!/bin/bash
TMP=$(cat /opt/users.txt)
for USER in $TMP
do
    useradd $USER && echo "123456" | passwd --stdin $USER &> /dev/null
done
[root@localhost opt]# chmod +x test02.sh 
[root@localhost opt]# ./test02.sh 
[root@localhost opt]# tail -5 /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
wangwu:x:1003:1003::/home/wangwu:/bin/bash
zhaoliu:x:1004:1004::/home/zhaoliu:/bin/bash
[root@localhost opt]# 
[root@localhost opt]# su zhangsan
[zhangsan@localhost opt]$ su lisi
密码:
[lisi@localhost opt]$示例2:
根据IP地址检查主机状态:
- IP地址存放在ipadds.txt文件中,每行一个;
- 使用ping命令检测各主机的连通性。
shell脚本如下:
#!/bin/bash
TMP=$(cat /opt/ipadds.txt)
for USER in $TMP
do
 ping -c 3 -i 0.2 -w 3 $USER &> /dev/null
 if [ $? -eq 0 ]
 then
  echo "$USER is up"
 else
  echo "$USER is down"
 fi
donewhile循环语句:
循环结构:重复测试某个条件,只要条件成立则反复执行。
while  条件测试操作
do
    命令序列
done
示例1:
批量添加用户:
- 用户名称以stu开头,按数字顺序进行编号;
- 一共添加10个用户,即stu1、 stu2、....stu20;
- 初始密码均设为123456。
shell脚本如下:
#!/bin/bash
PRE="stu"
num=1
while [ $num -le 10 ]
do
  useradd $PRE$num
  echo "123456" | passwd --stdin $PRE$num &> /dev/dull
 let num++
done示例2:
猜商品价格:
- 通过变量RANDOM获得随机数;
- 提示用户猜测并记录次数,猜中后退出循环。
shell脚本如下:
#!/bin/bash
TIMES=0
PRICE=$(expr $RANDOM % 1000)
while true
do
read -p "请猜价格(0-999):" money
let TIMES++
     if [ $money -gt $PRICE ]
     then 
         echo "您猜的太大"
     elif [ $money -lt $PRICE ]
     then       
         echo "您猜的太小"
     else         
         echo "您猜对了,正确价格为:$num"
         echo "您一共猜了$TIMES次"
     break 
     fi 
done until循环语句:
循环结构:重复测试某个条件,只要条件不成立则反复执行。
until  条件测试操作
do
   命令序列
done.jpg)
示例1:
计算1~50的和值:
- 通过循环累加的方式计算1~50的和值。
实验如下:
[root@localhost opt]# vim test04.sh
[root@localhost opt]# cat test04.sh 
#!/bin/bash
i=0
sum=0
until [ $i -eq 51 ]
do
    let sum+=i
    let i++
done
echo $sum
[root@localhost opt]# chmod +x test04.sh 
[root@localhost opt]# ./test04.sh 
1275
[root@localhost opt]# 示例2:
为指定用户发送在线消息:
- 若用户不在线(未登录系统),则每10分钟试一次, 直至用户登录系统后在发送信息;
- 用户名与消息通过位置参数传递给脚本。
脚本如下:
#!/bin/bash
username=$1
#判断信息格式
if [ $# -lt 1 ];then
        echo "Usage:`basename $0` []"
        exit 1
fi
#判断用户是否存在
if grep "^$username:" /etc/passwd > /dev/null
then :
else
        echo "用户不存在"
        exit 1
fi
#用户是否在线,如果不在线每5秒联系一次
until who|grep "^$username" > /dev/null
do
        echo "用户不在线"
        sleep 5
done
mes=$*
echo $mes | write $username  Shell函数
Shell函数定义:
将命令序列按格式写在一起可方便重复使用命令序列。
[ function ] 函数名(){
    命令序列
        [return x]
}                                              //使用return或exit可以显式地结束函数调用函数的方法:
函数名 [参数1] [参数2]
示例:
两个数字求和:
- 通过sum () {}定义函数;
- 通过调用函数求两个数和。
实验如下:
[root@localhost opt]# vim test06.sh 
[root@localhost opt]# cat test06.sh 
#!/bin/bash
sum(){
    s=`expr $1 + $2`
    echo $s 
}
[root@localhost opt]# chmod +x test06.sh 
[root@localhost opt]# ./test06.sh 
[root@localhost opt]# sum 5 6
11
[root@localhost opt]#Shell数组
应用场景包括:
- 获取数组长度
- 获取元素长度
- 遍历元素
- 元素切片
- 元素替换
- 元素删除
 ......
数组定义方法:
- 方法一
数组名= (value0 value1 value2 ..)
- 方法二
数组名= ([0]=value [1]=value [2]=value ...)               //数组元素之间使用空格隔开
- 方法三
列表名="value0 value1 value2 ..."
数组名= ($列表名)- 方法四
数组名[0]="value”
数组名[1]="value"
数组名[2]="value"数组包括的数据类型:
- 数值类型
- 字符类型:使用" "或' '定义
获取数组长度:
格式:${#数组名[@\*]}
实例:
[root@localhost ~]# arr_ nymber=(1 2 3 4 5);
[root@localhost ~]#arr_ length=${#arr_ number[*]}
[root@localhost ~]# echo $arr length
5读取某下标的赋值:
格式:${数组名[下标]}
实例:
[root@localhost ~]#arr_ index2=${arr_ number[2]}
[root@localhost ~]# echo $arr_ index2
3数组遍历:
[root@localhost ~]# for v in 
${arr_ number[@]}
> do
>     echo $V
> done
1
2
3
4
5Shell脚本调试
echo命令
bash命令
语法:sh [-nvx] 脚本名
常用选项:
-n:不执行脚本,仅检查语法。没有语法问题不显示任何内容,有问题提示报错。
-v:执行脚本时,先显示脚本内容,然后执行脚本。存在错误时,给出错误提示。
-x:将执行的脚本内容输出到屏幕上。set命令
set -x:开启调节模式
set +x:关闭调节模式文章标题:Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组
当前路径:http://www.cqwzjz.cn/article/ihdshd.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 