14.3、bash脚本编程

前端之家收集整理的这篇文章主要介绍了14.3、bash脚本编程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、bash脚本编程语句控制:

顺序执行

选择执行

循环执行 for、while、until


进入条件 退出条件
for 列表元素非空

列表元素遍历完成

while 条件测试结果为真 条件测试结果为假
until 条件测试结果为假 条件测试结果为真




2、循环控制语句

循环控制语句用在循环体中,用于控制循环执行行为的

有两种控制循环执行行为的语句:continue、break

continue语句:提前结束本轮循环,而直接进入下一轮玄幻判断(一般用在语句中间)

break语句:提前跳出循环,可以用在循环执行语句的任何位置。


格式:以while循环为例

while CONDITION1 ;do

command1

command2

if CONDITION2;then

command3

continue //提前结束本轮循环

fi

command#

done

while CONDITION1;do

command1

command2

if CONDITION2;then

bareak //跳出整个while循环

fi

done


创建死循环:while示例

while true ;do

循环体

done

注意:死循环退出方式,某个测试条件满足时,让死循环执行break命令



示例:求100以内所有偶数的和:(conutine示例)

while循环:

[root@localhost sh]# cat sum_os.sh

#!/bin/bash

declare -i i=0

declare -i sum=0

while [ $i -le 100 ];do

let i++

if [ $[$i%2] -eq 1 ];then

continue

fi

sum=$[$sum+$i]

done

echo "sum:$sum"

[root@localhost sh]#



[root@localhost sh]# bash sum_os.sh

sum:2550


until循环:

[root@localhost sh]# cat until_os.sh

#!/bin/bash

declare -i i=0

declare -i sum=0

until [ $i -gt 100 ];do

let i++

if [ $[$i%2] -eq 1 ];then

continue

fi

sum=$[$sum+$i]

done

echo "sum:$sum"

[root@localhost sh]#



[root@localhost sh]# bash until_os.sh

sum:2550

[root@localhost sh]#


for循环:

[root@localhost sh]# cat for_os.sh

#!/bin/bash

declare i i=0

declare i sum=0

for i in {0..100};do

let i++

if [ $[$i%2] -eq 1 ];then

continue

fi

sum=$[$sum+$i]

done

echo "sum:$sum"

[root@localhost sh]#



[root@localhost sh]# bash for_os.sh

sum:2550


bash -n 脚本名 :检查是否有语法错误

bash -x 脚本名 :显示脚本执行过程


示例:求100以内正整奇数之和,用死循环来实现

[root@localhost sh]# cat while_sum_js_dead.sh

#!/bin/bash

declare i i=1

declare i sum=0

while true ;do

let sum+=$i

let i+=2

if [ $i -gt 100 ];then

break

fi

done

echo "sum:$sum"

[root@localhost sh]#

[root@localhost sh]# bash while_sum_js_dead.sh

sum:2500




3、sleep命令:延迟指定时长

格式:#sleep NUMBER //NUMBER为数字,单位为秒

如:#sleep 3


sleep命令用在脚本中示例:

练习:每隔3秒钟到系统上获取已经登录用户用户信息,其中,如果logstash用户用户登录了系统,则记录与脚本中,并退出

方法一:

[root@localhost sh]# cat user_login.sh

#!/bin/bash

while true ;do

if who |grep "^logstash\>" &>/dev/null;then

break

fi

sleep 3

done

echo "$(date) logstash logged on >>/tmp/user.log"


[root@localhost sh]#


方法二:

[root@localhost sh]# cat until_user_logon.sh

#!/bin/bash

until who | grep "^logstash\>" &> /dev/null; do

sleep 3

done

echo "$(date +%F-%T) logstash is logon"


[root@localhost sh]#



注意:date +%F:显示完成日期

date +%T:显示完整时间

[root@localhost sh]# date +%F

2018-01-14

[root@localhost sh]# date +%T

12:02:51

[root@localhost sh]#





4、while循环的特殊用法:遍历文件的每一行

格式:

while read VARIABLE;do //read为关键字,VARIABLE为变量

循环体

done < /PATH/FROM/SOMEFILE


实现的功能:一次读取/PATH/FROM/SOMEFILE文件中的每一行,且将其赋值给VARIABLE变量。


示例:找出ID为偶数的用户显示用户名、ID、及默认shell

[root@localhost sh]# cat while_read.sh

#!/bin/bash

while read var_line;do

userid=$(echo "${var_line} "| cut -d: -f3)

username=$(echo "${var_line} "| cut -d: -f1)

usershell=$(echo "${var_line}" |cut -d: -f7)

if [ $[$userid%2] -eq 0 ];then

echo "$username,$userid,$usershell"

fi

done </etc/passwd

[root@localhost sh]#


5、for循环的特殊用法

格式:

for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do //注意,要写两个括号(( ))

循环体

done

实现的功能:while的三个语句用一个for语句实现


执行的次序:

控制变量初始化:仅在循环代码开始执行时,运行一次

控制变量的修正表达式:每轮循环结束会先进行控制变量修正表达式运算,而后在做条件判断

条件判断:> < = <= >=,直接写条件比较

示例:求100以内的正整数之和

[root@localhost sh]# cat for_sum_100.sh

#!/bin/bash

declare -i sum=0

for (( i=1;i<=100;i++));do

let sum+=$i

done

echo "sum:$sum"


[root@localhost sh]#

[root@localhost sh]# bash for_sum_100.sh

sum:5050

[root@localhost sh]#


示例:打印九九乘法表

[root@localhost sh]# cat for_99.2.sh

#!/bin/bash

for ((i=1;i<=9;i++));do

for ((j=1;j<=i;j++));do

echo -e -n "${i}*${j}=$[${i}*${j}]\t"

done

echo " "

done

[root@localhost sh]#

[root@localhost sh]# bash for_99.2.sh

1*1=1

2*1=2 2*2=4

3*1=3 3*2=6 3*3=9

4*1=4 4*2=8 4*3=12 4*4=16

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

猜你在找的Bash相关文章