shell之case和循环语句(case语句的格式与举例)(for循环,while循环until循环语句的详解和continue,break解释, 九九乘法口诀表 ,等腰三角形)
生活随笔
收集整理的這篇文章主要介紹了
shell之case和循环语句(case语句的格式与举例)(for循环,while循环until循环语句的详解和continue,break解释, 九九乘法口诀表 ,等腰三角形)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 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;;... *) esaccase語句的實例
100分優秀 70 分良好 60 分不及格
[root@localhost ~]# vi pinghost.sh read -p "請輸入(0-100) 成績: " score case $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命令序列 donefor語句實例
批量添加用戶,密碼為123456
[root@localhost opt]# vim name.txt.sh zhangsan lisi wanwu [root@localhost opt]# vim user.sh #!/bin/bash list=$( cat /root/4.txt ) 這里格式$( 要連一起 =$連一起 for add in $listdouseradd $addecho "123123" | passwd --stdin $addecho "創建成功{user} "done批量刪除用戶
[root@localhost opt]# vim user.sh #!/bin/bash list=$(cat /root/4.txt) for add in $listdouserdel -r $add &>/dev/nulldone查看主機狀態
[root@localhost opt]# vim 1.txt 192.168.100.1 192.168.100.2 192.168.100.3 [root@localhost opt]# vim ping.sh #!/bin/bash name=$(cat /root/1.txt)for ip in $name doping -c 3 -i 0.2 -w 3 $ip > /dev/null if [ $? -eq 0 ];thenecho "${ip} is up"elseecho "${ip} is down" fi done [root@localhost opt]# vim ping.sh Host 192.168.197.1 is up Host 192.168.197.2 is up Host 192.168.197.3 is down -c:發送三個包 -i: 發包間隔0.2秒 -W:等待時間3秒 $?最后一次執行的命令的返回狀態。如果這個變量的值為 0,則證明上一條命令正確執行;如果這 個變量的值為非 0 (具體是哪個數由命令自己來決定),則證明上一條命令執行錯誤查看主機狀態第二種方法
[root@localhost opt]# vim ipchk.sh #!/bin/bash for ((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"fi done [root@localhost opt]# ./ipchk.sh Host 192.168.197.1 is up Host 192.168.197.2 is up Host 192.168.197.3 is down Host 192.168.197.4 is down Host 192.168.197.5 is down Host 192.168.197.6 is down Host 192.168.197.7 is down Host 192.168.197.8 is down Host 192.168.197.9 is down Host 192.168.197.10 is down用循環語句輸出1-10的數字的五種辦法
1
[root@192 ~]# vi 6.txt.sh #!/bin/bash for ((i=1;i<=10;i++)) doecho $i done2
#!/bin/bash i=1 for ((;i<=10;i++)) doecho "$i" done3
#!/bin/bash i=1 for ((;i<=10;)) doecho "$i"let i++ done4
#!/bin/bash i=1 for ((;;)) doif [ $i -le 10 ]thenecho "$i"let i++elseexit 0fi done計算偶數/奇數的和
計算偶數的和
[root@192 ~]# vi 6.txt.sh #!/bin/bash sum=0 for((i=0;i<=10;i+=2))dolet sum+=$idoneecho "總和為:$sum"計算奇數的和
[root@192 ~]# vi 6.txt.sh #!/bin/bash sum=0 for((i=1;i<=10;i+=2))dolet sum+=$idoneecho "總和為:$sum"求偶數和
[root@192 ~]# vi 6.txt.sh #!/bin/bash sum=0 for((i=0;i<=10;i+=2))doif [ `expr $i % 2` -eq 0 ]thenlet sum+=$ifidoneecho "總和為:$sum"求奇數和
[root@192 ~]# vi 6.txt.sh #!/bin/bash sum=0 for((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/sbin i=1 while [ $i -le 20 ]doecho $ilet i++ done使用while批量添加用戶
#!/bin/bash i=0 while [ $i -le 19 ] dolet i++useradd stu$iecho "123456" | passwd --stdin stu$i &> /dev/nullecho "stu$i添加成功" done echo "添加完畢"顯示出1-10不能被3整除的數
[root@localhost opt]# vim count1.sh #!/bin/bash i=1 while [ $i -le 10 ] doif [ `expr $i % 3` -ne 0 ];thenecho "$i"filet i++ done [root@localhost opt]# sh count1.sh 1 2 4 5 7 8 10九九乘法表(2種方法)
echo -n 不換行輸出
echo -e 處理特殊字符
\a 發出警告聲;
\b 刪除前一個字符; \c 最后不加上換行符號; \f 換行但光標仍舊停留在原來的位置; \n 換行且光標移至行首; \r 光標移至行首,但不換行; \t 插入tab; \v 與\f相同; \ 插入\字符; \nnn 插入nnn(八進制)所代表的ASCII字符;第一種方法
#!/bin/bash for ((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'fidone done第二種方法
#!/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.sh 1x1=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/bash for ((i=1;i<=5;i++)) dofor ((j=1;j<=i;j++))doecho -n "#"doneecho "" done ~ [root@promote ~]# sh 6.txt.sh # ## ### #### #####在輸出倒三角
#!/bin/bash for ((i=1;i<=5;i++)) dofor ((k=5;k>=i;k--))doecho -n "#"doneecho "" done ~ [root@promote ~]# sh 6.txt.sh ##### #### ### ## #等腰三角形
#!/bin/bash for ((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/bash i=1 while [ $i -le 20 ] doecho $ilet i++ done [root@192 ~]# sh abn.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20while死循環
#!/bin/bash while true doread -p "輸入yes退出;" keyiif [ $keyi = yes ]thenbreakfi done echo "退出成功" [root@192 ~]# sh b.sh 輸入yes退出;no 輸入yes退出;12 輸入yes退出;yes 退出成功案例2
創建20個用戶名為com密碼為123456創建20個用戶密碼為123456
#!/bin/bash name="com" i=1 while [ $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/bash i=100 while [ $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:" num1 num=$(($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 "平局,再來"fi elseecho "你違規了" 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/bash username=$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 2 fi ~ ^脫字符 模式位于文本首行開始 ---------------------------------------------------------測試用戶是否在線,如何不在線,每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 zhang user 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 2 fi ~ ^脫字符 模式位于文本首行開始 ---------------------------------------------------------測試用戶是否在線,如何不在線,每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 zhang user no login user no login [root@localhost ~]# echo "hollo" | write tange 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的shell之case和循环语句(case语句的格式与举例)(for循环,while循环until循环语句的详解和continue,break解释, 九九乘法口诀表 ,等腰三角形)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 256GB内存?x299主板到底支持多大
- 下一篇: 内存启动不了?3200MHz频率惹的祸,