300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > shell之case和循环语句(case语句的格式与举例)(for循环 while循环until循环语句的

shell之case和循环语句(case语句的格式与举例)(for循环 while循环until循环语句的

时间:2022-08-14 05:12:26

相关推荐

shell之case和循环语句(case语句的格式与举例)(for循环 while循环until循环语句的

文章目录

shell编程之case语句与循环语句(for,while)case多分支语句case语句的实例使用for循环语句for语句实例用循环语句输出1-10的数字的五种办法计算偶数/奇数的和while循环语句使用while批量添加用户九九乘法表(2种方法)三角形(直角,到三角,等腰)等腰三角形untill循环语句案例while死循环案例2案例3通过变量RANDOM获得随机数continue和break,exit区别给指定用户发送消息

shell编程之case语句与循环语句(for,while)

case多分支语句

格式:case 变量值 in模式1)命令序列1;;模式2)命令序列2;;...*)esac

case语句的实例

100分优秀 70 分良好 60 分不及格

[root@localhost ~]# vi pinghost.sh read -p "请输入(0-100) 成绩: " scorecase $score in8[5-9]|9[0-9]|100)echo "成绩优秀";;7[0-9]|8[0-4])echo "成绩良好";;6[0-9])echo "成绩不合格";;*)echo "成绩不合格" esac

使用for循环语句

读取不同的变量值,用来逐个执行同一组命令

语句结构for 变量名 in 取值列表do命令序列done

for语句实例

批量添加用户,密码为123456

[root@localhost opt]# vim name.txt.shzhangsan lisi wanwu[root@localhost opt]# vim user.sh#!/bin/bashlist=$( cat /root/4.txt ) 这里格式$( 要连一起 =$连一起for add in $listdouseradd $addecho "123123" | passwd --stdin $addecho "创建成功{user} "done

批量删除用户

[root@localhost opt]# vim user.sh#!/bin/bashlist=$(cat /root/4.txt)for add in $listdouserdel -r $add &>/dev/nulldone

查看主机状态

[root@localhost opt]# vim 1.txt192.168.100.1192.168.100.2192.168.100.3[root@localhost opt]# vim ping.sh #!/bin/bashname=$(cat /root/1.txt)for ip in $namedoping -c 3 -i 0.2 -w 3 $ip > /dev/nullif [ $? -eq 0 ];thenecho "${ip} is up"elseecho "${ip} is down"fidone[root@localhost opt]# vim ping.sh Host 192.168.197.1 is upHost 192.168.197.2 is upHost 192.168.197.3 is down-c:发送三个包-i: 发包间隔0.2秒-W:等待时间3秒$?最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这 个变量的值为非 0 (具体是哪个数由命令自己来决定),则证明上一条命令执行错误

查看主机状态第二种方法

[root@localhost opt]# vim ipchk.sh #!/bin/bashfor ((i=1;i<=10;i++))doping -c 3 -i 0.2 -W 3 "192.168.197.$i" &> /dev/nullif [ $? -eq 0 ]thenecho "Host 192.168.197.$i is up"elseecho "Host 192.168.197.$i is down"fidone[root@localhost opt]# ./ipchk.sh Host 192.168.197.1 is upHost 192.168.197.2 is upHost 192.168.197.3 is downHost 192.168.197.4 is downHost 192.168.197.5 is downHost 192.168.197.6 is downHost 192.168.197.7 is downHost 192.168.197.8 is downHost 192.168.197.9 is downHost 192.168.197.10 is down

用循环语句输出1-10的数字的五种办法

1

[root@192 ~]# vi 6.txt.sh #!/bin/bashfor ((i=1;i<=10;i++))doecho $idone

2

#!/bin/bashi=1for ((;i<=10;i++))doecho "$i"done

3

#!/bin/bashi=1for ((;i<=10;))doecho "$i"let i++done

4

#!/bin/bashi=1for ((;;))doif [ $i -le 10 ]thenecho "$i"let i++elseexit 0fidone

计算偶数/奇数的和

计算偶数的和

[root@192 ~]# vi 6.txt.sh #!/bin/bashsum=0for((i=0;i<=10;i+=2))dolet sum+=$idoneecho "总和为:$sum"

计算奇数的和

[root@192 ~]# vi 6.txt.sh #!/bin/bashsum=0for((i=1;i<=10;i+=2))dolet sum+=$idoneecho "总和为:$sum"

求偶数和

[root@192 ~]# vi 6.txt.sh #!/bin/bashsum=0for((i=0;i<=10;i+=2))doif [ `expr $i % 2` -eq 0 ]thenlet sum+=$ifidoneecho "总和为:$sum"

求奇数和

[root@192 ~]# vi 6.txt.sh #!/bin/bashsum=0for((i=1;i<=10;i+=2))doif [ `expr $i % 2` -eq 1 ]thenlet sum+=$ifidoneecho "总和为:$sum"

while循环语句

语句结构while 条件测试操作do命令序列done

使用while循环语句输出1-10数字

[root@192 ~]# vi 6.txt.sh #!/bin/sbini=1while [ $i -le 20 ]doecho $ilet i++done

使用while批量添加用户

#!/bin/bashi=0while [ $i -le 19 ]dolet i++useradd stu$iecho "123456" | passwd --stdin stu$i &> /dev/nullecho "stu$i添加成功"doneecho "添加完毕"

显示出1-10不能被3整除的数

[root@localhost opt]# vim count1.sh#!/bin/bashi=1while [ $i -le 10 ] doif [ `expr $i % 3` -ne 0 ];thenecho "$i"filet i++done[root@localhost opt]# sh count1.sh 12457810

九九乘法表(2种方法)

echo -n 不换行输出

echo -e 处理特殊字符

\a 发出警告声;

\b 删除前一个字符; \c 最后不加上换行符号; \f 换行但光标仍旧停留在原来的位置; \n 换行且光标移至行首; \r 光标移至行首,但不换行; \t 插入tab; \v 与\f相同; \ 插入\字符; \nnn 插入nnn(八进制)所代表的ASCII字符;

第一种方法

#!/bin/bashfor ((k=1;k<=9;k++))dofor ((i=1;i<=$k;i++))doecho -n ""$k"x"$i"=$(expr $k \* $i) "if [ $i -eq $k ]thenecho -e '\n'fidonedone

第二种方法

#!/bin/bashfor ((i=1;i<=9;i++))dofor ((k=1;k<=i;k++))doecho -ne "${i}x${k}=$[$i*$k]\t"doneecho ""done

[root@zhang .ssh]# sh zhang5.sh1x1=1 2x1=2 2x2=4 3x1=3 3x2=6 3x3=9 4x1=4 4x2=8 4x3=12 4x4=16 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64

三角形(直角,到三角,等腰)

先输出正三角

#!/bin/bashfor ((i=1;i<=5;i++))dofor ((j=1;j<=i;j++))doecho -n "#"doneecho ""done~[root@promote ~]# sh 6.txt.sh###############

在输出倒三角

#!/bin/bashfor ((i=1;i<=5;i++))dofor ((k=5;k>=i;k--))doecho -n "#"doneecho "" done~[root@promote ~]# sh 6.txt.sh###############

等腰三角形

#!/bin/bashfor ((i=1;i<=5;i++))dofor ((k=5;k>=i;k--))doecho -n " "donefor ((j=1;j<=$i*2-1;j++))doecho -n "*"doneecho ""done[root@promote ~]# sh 6.txt.sh*************************echo -n 不换行输出

untill循环语句

重复测试某个条件,只要条件不成立则反复执行

until 条件测试操作do命令序列done

案例

*until小于等于20

#!/bin/bashi=1while [ $i -le 20 ]doecho $ilet i++done[root@192 ~]# sh abn.sh1234567891011121314151617181920

while死循环

#!/bin/bashwhile truedoread -p "输入yes退出;" keyiif [ $keyi = yes ]thenbreakfidoneecho "退出成功" [root@192 ~]# sh b.sh输入yes退出;no输入yes退出;12输入yes退出;yes退出成功

案例2

创建20个用户名为com密码为123456创建20个用户密码为123456

#!/bin/bashname="com"i=1while [ $i -le 20 ]douseradd ${name}${i}echo "123456" | passwd --stdin ${name}${i}let i++done[root@192 ~]# sh 1.sh更改用户 com1 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 com2 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 com3 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 com4 的密码 。passwd:所有的身份验证令牌已经成功更新。...更改用户 com20 的密码 。passwd:所有的身份验证令牌已经成功更新。[root@192 ~]# vim 1.sh

案例3

100中没有3的倍数

#!/bin/bashi=100while [ $i -gt 0 ]doif [ `expr $i % 3` -eq 0 ];thenlet i--continueelseecho $ifilet i--done~

通过变量RANDOM获得随机数

石头剪刀布实验

[root@localhost opt]# vim four.sh #!/bin/bash#name=four#This is a game!echo "石头=1、剪刀=2、布=3"read -p "请随机输入1或2或3:" num1num=$(($RANDOM%3 + 1))if [ $num1 -ge 1 ] && [ $num1 -le 3 ];thenif [ $num -eq 1 ] && [ $num1 -eq 3 ];thenecho "恭喜哦,你赢了"elif [ $num -eq 1 ] && [ $num1 -eq 2 ];thenecho "你输了,不要灰心"elif [ $num -eq 2 ] && [ $num1 -eq 1 ];thenecho "恭喜哦,你赢了"elif [ $num -eq 2 ] && [ $num1 -eq 3 ];thenecho "你输了,不要灰心"elif [ $num -eq 3 ] && [ $num1 -eq 2 ];thenecho "恭喜哦,你赢了"elif [ $num -eq 3 ] && [ $num1 -eq 1 ];thenecho "你输了,不要灰心"elseecho "平局,再来"fielseecho "你违规了"fi[root@localhost opt]# sh four.sh 石头=1、剪刀=2、布=3请随机输入1或2或3:2你输了,不要灰心[root@localhost opt]# sh four.sh 石头=1、剪刀=2、布=3请随机输入1或2或3:1恭喜哦,你赢了[root@localhost opt]# sh four.sh 石头=1、剪刀=2、布=3请随机输入1或2或3:3恭喜哦,你赢了[root@localhost opt]# sh four.sh 石头=1、剪刀=2、布=3请随机输入1或2或3:4你违规了

continue和break,exit区别

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。1、break命令允许跳出所有循环(终止执行后面的所有循环)。结束并退出循环。2、continue不会跳出所有循环,仅仅跳出当前循环,转而进入下一轮循环。3、exit退出脚本,常带一个整数给系统,如 exit 0

给指定用户发送消息

为指定用户发送消息,若用户不在线(未登录系统),则每5秒钟试一次,直到用户登录系统后再发送在线消息,用户名与消息通过位置参数传递给脚本

给指定用户发送在线消息$# 添加到Shell的参数个数`basename $0`值显示当前脚本或命令的名字exit 是用来结束一个程序的执行的,而return只是用来从一个函数中返回。exit 1 的时候,一般是出错定义这个1,也可以是其他数字,很多系统程序这个错误编号是有约定的含义的。 但不为0就表示程序运行出错。调用环境就可以根据这个返回值判断 你这个程序运行是否ok。#!/bin/bashusername=$1if [ $# -lt 1 ];thenecho " zhang: `basename $0 ` <username > [ < message > ] " exit 1fi [root@localhost ~]# echo $?1[root@localhost ~]# sh 20.sh tanger asdj[root@localhost ~]# echo $?0---------------------------------------------------------验证是否属于系统用户if grep "^$username" /etc/passwd > /dev/null;then :elseecho "not user "exit 2fi~^脱字符模式位于文本首行开始---------------------------------------------------------测试用户是否在线,如何不在线,每5s联系一次until who | grep "$username" > /dev/num;doecho "user no login "sleep 5done[root@localhost ~]# ./20.sh tange[root@localhost ~]# vim 20.sh [root@localhost ~]# ./20.sh zhanguser no login user no login [root@localhost ~]# echo "hollo" | write tangenecho " zhang: `basename $0 ` <username > [ < message > ] " exit 1fi [root@localhost ~]# echo $?1[root@localhost ~]# sh 20.sh tanger asdj[root@localhost ~]# echo $?0---------------------------------------------------------验证是否属于系统用户if grep "^$username" /etc/passwd > /dev/null;then :elseecho "not user "exit 2fi~^脱字符模式位于文本首行开始---------------------------------------------------------测试用户是否在线,如何不在线,每5s联系一次until who | grep "$username" > /dev/num;doecho "user no login "sleep 5done[root@localhost ~]# ./20.sh tange[root@localhost ~]# vim 20.sh [root@localhost ~]# ./20.sh zhanguser no login user no login [root@localhost ~]# echo "hollo" | write tange

shell之case和循环语句(case语句的格式与举例)(for循环 while循环until循环语句的详解和continue break解释 九九乘法口诀表 等腰三角形)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。