bash中的循环

until CONDITION; do

循环体

done

进入条件:false

退出条件:true

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

[[email protected] shell]# vim summary.sh

#!/bin/bash

#

declare -i i=1

declare -i sum=0

until [ $i -gt 100 ];do

let sum+=$i

let i++

done

echo "Sum: $sum"

示例:打印九九乘法表

[[email protected] shell]# cat multi.sh

#!/bin/bash

#

declare -i j=1

declare -i i=1

until [ $j -gt 9 ];do

until [ $i -gt $j ];do

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

let i++

done

echo

let i=1

let j++

done

循环控制语句(用于循环体中):

continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;

while CONDTIITON1;do

CMD1

...

if CONDITION2;then

continue

fi

CMDn

...

done

break[N]:提前结束循环;

while CONDTIITON1;do

CMD1

...

if CONDITION2;then

continue

fi

CMDn

...

done

示例1:求100以内所有偶数之和;要求循环遍历100以内的所有正整数;

[[email protected] shell]# cat even.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

let sum+=$i

done

echo "Even sum: $sum"

创建死循环:

while true;do

循环体

done

until false;do

循环体

done

示例2:每隔3种钟到系统上获取已经登录的用户的信息,如果docker登录了,则记录于日志中,并退出;

[[email protected] shell]# cat user1.sh

#!/bin/bash

#

read -p "Enter a user name:" username

while true;do

if who | grep "^$username" &> /dev/null;then

break

fi

sleep 3

done

echo "$username logged on." >> /tmp/user.log

方法二:

[[email protected] shell]# cat user2.sh

#!/bin/bash

#

read -p "Enter a user name:" username

until who | grep "^$username" &> /dev/null;do

sleep 3

done

echo "$username logged on." >> /tmp/user.log

视频51 32分钟

while循环的特殊用法(遍历文件的每一行);

while read line;do

循环体

done < /PATH/FROM/SOMEFILE

修改读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line;

示例:找出其ID号为偶数的所有用户,显示其用户名及ID号

[[email protected] shell]# cat evenid.sh

#!/bin/bash

#

while read line;do

if [ $[`echo $line | cut -d: -f3` % 2 ] -eq 0 ];then

echo -e -n "username:`echo $line | cut -d: -f1`\t"

echo "uid:`echo $line | cut -d: -f3`"

fi

done < /etc/passwd

视频51  36分钟

for循环的特殊格式:

for ((控制变量的初始化;条件判断表达式;控制变量的修正表达式));do

循环体

done

控制变量初始化:仅运行到循环代码段时执行一次;

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

示例:求100以内所有正整数之和;

[[email protected] shell]# cat sum2.sh

#!/bin/bash

#

declare -i sum=0

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

let sum+=$i

done

echo "Sum: $sum."

示例:打印乘法表

[[email protected] shell]# cat multi2.sh

#!/bin/bash

#

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

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

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

done

echo

done

练习:写一个脚本,完成如下任务

(1)显示一个如下菜单:

cpu) show cpu information;

mem) show memory information;

disk) show disk information;

quit) quit

(2)提示用户选择选项

(3)显示用户选择的内容

[[email protected] shell]# cat infosys.sh

#!/bin/bash

#

cat << EOF

cpu) show cpu information;

mem) show mem information;

disk) show disk information;

quit) quit

=========================================

EOF

read -p "Enter a option:" option

while [ "$option" != ‘cpu‘ \

-a "$option" != ‘mem‘ \

-a "$option" != ‘disk‘ \

-a "$option" != ‘quit‘ ];do

read -p "Wrong option,Enter again:" option

done

if [ "$option" == ‘cpu‘ ];then

lscpu

elif [ "$option" == ‘mem‘ ];then

cat /proc/meminfo

elif [ "$option" == ‘disk‘ ];then

fdisk -l

else

echo "Quit"

exit 0

fi

进一步地:

用户选择,并显示完成后不退出脚本,而是提示用户继续选择显示其它内容,直到使用quit方式退出;

条件判断:case语句

case 变量引用 in

PAT1)

分支1

;;

PAT2)

分支2

;;

...

*)

默认分支

;;

esac

示例:

[[email protected] shell]# cat infosys2.sh

#!/bin/bash

#

cat << EOF

cpu) show cpu information;

mem) show mem information;

disk) show disk information;

quit) quit

=========================================

EOF

read -p "Enter a option:" option

while [ "$option" != ‘cpu‘ \

-a "$option" != ‘mem‘ \

-a "$option" != ‘disk‘ \

-a "$option" != ‘quit‘ ];do

read -p "Wrong option,Enter again:" option

done

case "$option" in

cpu)

lscpu

;;

mem)

cat /proc/meminfo

;;

disk)

fdisk -l

;;

*)

echo "Quit..."

exit 0

esac

[[email protected] shell]# cat f1.sh

#!/bin/bash

#

username=‘myuser‘

function adduser {

if id $username &> /dev/null; then

echo "$username exists."

return 1

else

useradd $username

[ $? -eq 0 ] && echo "Add $username finished." && return 0

fi

}

adduser

echo $?

第二种  函数调用  视频28分钟

[[email protected] shell]# cat f2.sh

#!/bin/bash

#

function adduser {

if id $username &> /dev/null; then

echo "$username exists."

return 1

else

useradd $username

[ $? -eq 0 ] && echo "Add $username finished." && return 0

fi

}

for i in {1..10}; do

username=myuser$i

adduser

done

练习:写一个脚本,完成如下要求     31分钟

(1)脚本可接受参数:start,stop,restart,status;

(2)如果参数非此四者之一,提示使用格式后报错退出;

(3)如果是start:则创建/var/lock/subsys/SCRIPT_NAME,并显示“启动成功”;

考虑:如何事先已经启动过一次,该如何处理?

(4)如果是stop:则删除/var/lock/subsys/SCRIPT_NAME,并显示“停止完成”;

考虑:如果事先已经停止过了,该如何处理?

(5)如果是restart,则先stop,再start;

考虑:如果本来没有start,如何处理?

(6)如果是status,则

如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAME is running...”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped...”

其中,SCRIPT_NAME 为当前脚本名;

时间: 2024-12-27 22:05:14

bash中的循环的相关文章

bash中的循环控制语句

bash中的循环: for while until for 变量 in 列表; do 循环体 done 如何生成列表: 1. {1..100} 2. seq 1 100 seq [起始数 [步进长度]] 结束数 for((expr1; expr2; expr3)); do 循环体 done while循环:适用于循环次数未知的场景 语法: while CONDITION; do statement -- done 计算100以内所有正整数的和: #!/bin/bash # declare -i

bash中for循环添加10个用户和删除10个用户

1. 循环添加10个用户: #!/bin/bash# for i in {1..10}; do    if id user$i &> /dev/null; then        echo "user$i exists."    else        useradd user$i        echo user$i | passwd --stdin user$i &> /dev/null        echo "add user user$i

bash中for循环求100内奇数和偶数的和

#/bin/bash declare -i EVENSUM=0declare -i ODDSUM=0 for I in {1..100}; do    if [ $[$I%2] -eq 0 ]; then        let EVENSUM+=$I    else        let ODDSUM+=$I    fidone echo "odd sum is: $ODDSUM."echo "event sum is: $EVENSUM."

shell中for循环总结

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done2.在shell中常用的是 for i in $(seq 10)3.for i in `ls` 4.for i in ${arr[@]}5.for i in $* ; do6.for File in /proc/sys/net/ipv4/confacc

Shell中的循环语句实例

1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:"for" 循环总是接收 "in" 语句之后的某种类型的字列表.在本例中,指定了四个英语单词,但是字列表也可以引用磁盘上的文件,甚至文件通配符.实例1.2 #!/bin/bash for x in /var/log/* do     #echo "$x is a file

玩转Bash脚本:循环结构之while循环

总第8篇 本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html 和其他语言一样Bash的循环结构中也有while语句. 基本结构 while 条件 do 循环体 done 和for语句一样,它的循环体同样是do-done结构.我们可以把while语句再折叠一下 while 条件;do 循环体 done 还能进一步折叠成一行体 while 条件;do 循环体;done Bash语句大都可以写作一行,只不过可读性

bash脚本编程---循环

bash为过程式编程语言 代码执行顺序: 1.顺序执行:逐条执行 2.选择执行:代码有一个分支,条件满足时才会执行 两个或以上的分支,只会执行其中一个满足条件的分支 3.循环执行:代码片段(循环体)要执行0,1或多个来回 4.选择执行: 单分支的if语句: if 测试语句 then 代码分支 fi 双分支的if语句: if 测试条件:then 条件为真时执行的分支 else 条件为假时执行的分支 fi 例1:通过参数传递一个用户名给脚本,此用户不存时,则添加之: #!/bin/bash if !

shell中for循环

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done2.在shell中常用的是 for i in $(seq 10)3.for i in `ls` 4.for i in ${arr[@]}5.for i in $* ; do6.for File in /proc/sys/net/ipv4/confacc

玩转Bash脚本:循环结构之while循环(转)

总第8篇 本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html 和其他语言一样Bash的循环结构中也有while语句. 基本结构 while 条件 do 循环体 done 和for语句一样,它的循环体同样是do-done结构.我们可以把while语句再折叠一下 while 条件;do 循环体 done 还能进一步折叠成一行体 while 条件;do 循环体;done Bash语句大都可以写作一行,只不过可读性