8.5Shell编程-流程控制——linux

tech2024-04-16  15

一、 if语句

1. 单分支if条件语句

if [ 条件判断式 ] ; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi

范例: [rootlocalhost ~]# mkdir sh [rootlocalhost ~]# vim if1.sh

#!/bin/bash rate=$(df -h | grep /dev/mapper/centos-root | awk ‘{print $}| cut -d “%-f1) if [ $rate -ge 8 ] then echo/dev/mapper/centos-root is full!!” fi

[rootlocalhost ~]# chmod 755 if1.sh [rootlocalhost ~]# ./if1.sh /dev/mapper/centos-root is full!! 根分区使用空间超过8%,输出“/dev/mapper/centos-root is full!!”

2. 多分枝if条件语句

if [条件判断式] then 条件成立时,执行的程序 else 条件不成立时,执行的程序 fi

例子1:备份mysql数据库

#!/bin/bash #备份数据库 ntpdate asia.pool.ntp.org &>/dev/null #同步系统时间 date=$(date +%y%m%d) #把当前系统时间按照“年、月、日”格式赋予变量date date +%y%m%d表示只用数字显示年月日 size=$(du -sh /var/lib/mysql) #统计数据库mysql的大小,并把大小赋予size变量 #du -sh统计大小 #if [ -d /tmp/dbbak]是判断/tmp/dback是否存在

范例2:判断apache是否启动

#!/bin/bash Port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk ‘{print $2}) #使用nmap扫描服务器,并截取apache服务器状态,赋予变量port if {$port” == ”open” } then echo “$(date) http is ok!” >> /tmp/autostart-acc.log else /etc/rc.d/init.d/http start &>/dev/null echo “$(date) http is ok!” >> /tmp/autostart-acc.log fi

3. 多分支if条件语句 “exit”用于跳出if or elif

if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] 当条件判断式2成立时,执行程序2 …… else 当所有条件都不成立时,最后执行此程序 fi

二、 case语句

1. 多分支case条件语句 Case和if…elif…else一样都是多分支条件语句,不过和if多分支条件语句不同考的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系 2.格式

case $变量名 in “值1“) 如果变量的值等于值1,则执行程序1 ;; “值2“) 如果变量的值等于值2,则执行程序2 ;; …………省略其他分支 *) 如果变量的值都不是以上的值,则执行此程序 ;; esac

三、 for循环

1. 语法一

for 变量 in 值1 值2 值3…… do 程序 done

范例1: #!/bin/bash #打印时间

for time in morning noon afternoon evening do echo “This time is $time!” done

范例2: #!/bin/bash #批量解压缩脚本 cd /lamp

ls *.tar.gz > ls.log #将所以的压缩包名放入ls.log文件中 for i in $(cat ls.log) do tar -zxf $i &>/dev/null #/dev/null为回收站 done rm -rf /lamp/ls.log

2. 语法二

for ((初始值;循环控制条件;变量变化)) do 程序 done

范例1:

#!/bin/bash s=0 for ((i=1;i<=100;i=i+1)) do S=$(($s+$i)) done echo “ the sum of 1+2+3+……+100is: $s

范例2:

#!/bin/nash #批量添加用户 read -t 30 -p “input name: “ name read -t 30 -p “input number: “num read -t 30 -p “input password: “passwd if [ ! -z “$name-a ! -z “$number-a ! -z “$passwd] #判断输入的内容是否为空 then y=$(echo $number | sed ‘s/^[0-9]*$’//g) #判断人数为数字,若不是数字则y为空 if [ -z “$y] then for(( i=1;i<=$name;i=i+1)) do /usr/sbin/useradd$name$i>/dev/null #创建用户名 echo $passwd | usr/bin/passwd –stdin $name$i &>/den/null #创建用户密码 done fi fi

四、 while循环

1.while循环

while [ 条件判断式 ] do 程序 done

范例:

#!/bin/bash #从1加到100 i=1 s=0 while [ $i -le 100] #如果变量i的值小于等于100,则执行循环 do s=$(($i+$s)) i=$(($i+1)) done echo “ the sum is: $s

2. until循环 (只要条件不成立就继续)

until [ 条件判断式 ] do 程序 done

范例:

#!/bin/bash #从1加到100 i=1 s=0 until [ $i -lt 100] #如果变量i的值大于100,则停止循环 do s=$(($i+$s)) i=$(($i+1)) done echo “ the sum is: $s
最新回复(0)