shell脚本——for循环语句(包含应用案例)
生活随笔
收集整理的這篇文章主要介紹了
shell脚本——for循环语句(包含应用案例)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
for循環語句
- for循環語法結構
- 列表循環
- 不帶列表循環
- 實例
- 類C風格的for循環
- 循環控制語句
- 應用案例
- 九九乘法表
- 直角三角形
- 等腰三角形
- 倒等腰三角形
- 菱形
- 空心三角形
- 空心菱形
- 腳本計算1-100奇數和
- 判斷所輸整數是否為質數
- 批量創建用戶
- 測試網段存活主機
for循環語法結構
列表循環
列表for循環:用于將一組命令執行已知的次數
基本語法結構
#!/bin/bash for i in a b c doecho $i donefor i in {1..10} doecho $i done#!/bin/bash for i in $(seq 10) doecho $i done#!/bin/bash for i in $(seq 1 2 10) # 設置步長 doecho $i done不帶列表循環
不帶列表的for循環執行時由用戶指定參數和參數的個數
基本語法結構
for idocommand command…done實例
#!/bin/bash if [ $# -eq 0 ];thenecho "Usage: $0 加上參數" fi for i doecho $i done[root@maomao 3.27]# bash for.sh 1 2 3 1 2 3#!/bin/bash zhu=(2 4 6 8 10) echo "${zhu[*]}" fun() { local niu=() for i doniu[j++]=$[ $i * 5 ] done echo "${niu[@]}" } result=`fun ${zhu[@]}` echo "新數組的所有值:${result[@]}"類C風格的for循環
基本語法結構
for(( expr1;expr2;expr3 ))docommandcommand…done for (( i=1;i<=5;i++))doecho $idoneexpr1:定義變量并賦初值 expr2:決定是否進行循環(條件) expr3:決定循環變量如何改變,決定循環什么時候退出循環控制語句
- continue:繼續;表示循環體內下面的代碼不執行,重新開始下一次循環
- break:打斷;馬上停止執行本次循環,執行循環體后面的代碼
- exit:表示直接跳出程序
應用案例
九九乘法表
#!/bin/bash # 方法一 # by stanZ #!/bin/bash for ((i=1;i<=9;i++)) dofor((n=1;n<=$i;n++))do echo -n "$i*$n=`expr $i \* $n` "doneecho done#!/bin/bash # 方法二 # by stanZ #九九乘法表 for i in `seq 1 9` dofor j in $(seq 1 $i)do echo -n "$i*$j=$[ $i * $j ]" doneecho#let i++ done直角三角形
#!/bin/bash # by stanZ read -p "請輸入三角形的高:" h for((i=1;i<=$h;i++)) dofor j in `seq $i`do echo -n "*"doneecho done等腰三角形
#!/bin/bash # by stanZ read -p "請輸入三角形的高:" h for((i=1;i<=$h;i++)) doa=$[ $h - $i ]for j in `seq $a`doecho -n " "doneb=$((2*$i - 1 ))for k in `seq $b`doecho -n "*"doneecho done倒等腰三角形
#!/bin/bash # by stanZ read -p "請輸入三角形的高:" h for((i=0;i<=$h;i++)) dofor((j=1;j<=$i;j++))do echo -n " "donea=$(( 2*($h-$i) -1 ))for((j=$a;j>=1;j--))do echo -n "*"doneecho done菱形
#!/bin/bash # by stanZ read -p "請輸入菱形半徑:" h for((i=0;i<=$h;i++)) doa=$[ $h -$i ]for((j=1;j<=$a;j++))doecho -n " "doneb=$((2*$i - 1))for((k=1;k<=$b;k++))do echo -n "*"doneecho donefor((u=1;u<=$h;u++)) dofor((n=1;n<=$u;n++))doecho -n " "donel=$(( 2*($h-$u)-1 ))for((m=1;m<=$l;m++))doecho -n "*"doneecho done空心三角形
#!/bin/bash # by stanZ read -p "請輸入三角形的高:" h for((i=1;i<=h;i++)) doa=$[ $h - $i ]for((j=1;j<=$a;j++))do echo -n " "doneb=$[ 2*$i -1 ]for((k=1;k<=$b;k++))do if [ $k -eq 1 ];thenecho -n "*"elif [ $i -eq $h ];thenecho -n "*"elif [ $k -eq $((2*$i-1)) ];thenecho -n "*"elseecho -n " "fidoneecho done空心菱形
#!/bin/bash # by stanZ read -p "請輸入菱形的半徑:" h for((i=1;i<=$h;i++)) doa=$[ $h - $i ]for((j=1;j<=$a;j++))doecho -n " "doneb=$[ 2*$i - 1]for((k=1;k<=$b;k++))doif [ $k -eq 1 -o $k -eq $b ];thenecho -n "*"elseecho -n " "fidoneecho donefor((u=1;u<=$h;u++)) dofor((n=1;n<=$u;n++))doecho -n " "donec=$((2*($h-$u)-1))for((m=1;m<=$c;m++))doif [ $m -eq 1 -o $m -eq $c ];thenecho -n "*"elseecho -n " "fidoneecho done腳本計算1-100奇數和
#!/bin/bash # 方法1: sum=0 for i in {1..100..2} dosum=$[$i+$sum] done echo "1-100的奇數和為:$sum"# 方法2: #!/bin/bash sum=0 for ((i=1;i<=100;i+=2)) dolet sum=$i+$sum done echo "1-100的奇數和為:$sum"# 方法3: sum=0 for ((i=1;i<=100;i++)) doif [ $[$i%2] -ne 0 ];thenlet sum=$sum+$ifi 或者 test $[$i%2] -ne 0 && let sum=$sum+$idone echo "1-100的奇數和為:$sum"# 方法4: sum=0 for ((i=1;i<=100;i++)) doif [ $[$i%2] -eq 0 ];thencontinueelselet sum=$sum+$ifi done echo "1-100的奇數和為:$sum"#!/bin/bash sum=0 for ((i=1;i<=100;i++)) dotest $[$i%2] -eq 0 && continue || let sum=sum+$i done echo "1-100的奇數和是:$sum"判斷所輸整數是否為質數
#!/bin/bash #定義變量來保存用戶所輸入數字 read -p "請輸入一個正整數字:" number#先排除用戶輸入的數字1和2 [ $number -eq 1 ] && echo "$number不是質數" && exit [ $number -eq 2 ] && echo "$number是質數" && exit#循環判斷用戶所輸入的數字是否質數for i in `seq 2 $[$number-1]`do[ $[$number%$i] -eq 0 ] && echo "$number不是質數" && exitdone echo "$number是質數"優化思路:沒有必要全部產生2~$[$number-1]序列,只需要產生一半即可。更好解決辦法:類C風格完美避開了生成序列的坑 for (( i=2;i<=$[$number-1];i++)) do[ $[$number%$i] -eq 0 ] && echo "$number不是質數" && exitdone echo "$number是質數"# 方法二 #!/bin/bash read -p "輸入一個數字:" num if [ $num -eq 1 ];thenecho "$num不是質數"exit 1 elif [ $num -eq 2 ];thenecho "$num是質數"exit 2 fifor i in `seq 2 $[$num-1]` doif [ $[$num%$i] -eq 0 ];thenecho "$num不是質數"exit 3elseecho "$num是質數"exit 4fi done批量創建用戶
#!/bin/bash read -p "請輸入創建用戶的數量:" num read -p "請輸入創建用戶的前綴:" frefix read -p "請輸入創建用戶的密碼:" passwordfor((i=1;i<=$num;i++)) douser=$frefix$iuseradd $userecho "$password" |passwd --stdin $user &>/dev/nullif [ $? -eq 0 ];thenecho "$user is created"fidone測試網段存活主機
#!/bin/bash # by stanZ #for i in `seq 254` #for i in {1..254} read -p "請輸入想檢測的網段(默認192.168.188.0):" net for((i=1;i<=254;i++)) do{ if [ -z $net ];thenip=192.168.188.$iping -c 3 -W 1 -i 0.2 $ip &>/dev/nullif [ $? -eq 0 ];thenecho "$ip is up." elseecho "$ip is donw."fi elseip=$net.$iping -c 3 -W 1 -i 0.2 $ip &>/dev/nullif [ $? -eq 0 ];thenecho "$ip is up." elseecho "$ip is down."fifi}& # 放入后臺并發執行 done wait echo "all finish.."總結
以上是生活随笔為你收集整理的shell脚本——for循环语句(包含应用案例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 『小程序开发』关于微信小程序扫普通链接二
- 下一篇: 富时罗素指数开户GI全球指数零手续费送1