csh for循环_shell中的for循环用法详解_linux shell
這篇文章主要介紹了shell中的for循環(huán)用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
for 命令:
for i in 的各種用法 :
- for i in “file1” “file2” “file3”
- for i in /boot/*
- for i in /etc/*.conf
- for i in $(seq -w 10) --》等寬的01-10
- for i in {1…10}
- for i in $( ls )
- for I in $(< file)
- for i in “$@” --》取所有位置參數(shù),可簡寫為for i
注意:bash shell支持C式for循環(huán)
#!/bin/bash j=$1 for ((i=1; i<=j; i++)) do touch file$i && echo file $i is ok done- $@: 所有位置變量的內(nèi)容
- $#: 位置變量的個數(shù)
- $0: 文件名
- $*: 所有位置變量的內(nèi)容
編寫腳本應(yīng)該注意的事項(xiàng):
練習(xí)1:編寫腳本清空所有arp緩存記錄:
#!/bin/bash for i in $(arp | tail -n +2|tr -s ' ' |cut -d' ' -f1) doarp -d $i done練習(xí)2:產(chǎn)生十個隨機(jī)數(shù):
方法1:
方法2:
for i in $(seq 10);do echo $RANDOM;done練習(xí)3:倒數(shù)五秒:
#!/bin/bash echo "準(zhǔn)備倒數(shù)5秒:" for i in $(seq 5 -1 1) doecho -en "$i";sleep 1 done echo -e "開始"方法2:
#!/bin/bash echo "準(zhǔn)備倒數(shù)5秒:" for i in $(seq 5 -1 1) doecho -en "\b$i";sleep 1 done echo -e "\b開始"練習(xí)4:批量添加用戶:
#!/bin/bash for i in $(cat /root/) --》從列表文件讀取文件名 douseradd $iecho "123456" | passwd --stdin $i --》通過管道指定密碼字串 done練習(xí):
查找出uid大于10000的用戶,然后刪除,必須使用for循環(huán)。
方法2:用正則找出大于10000的用戶:
cat /etc/passwd | egrep “1[0-9]{4} | [2-9]{5,}”例子:根據(jù)ip地址檢查網(wǎng)絡(luò)中存活的主機(jī)ip。
break語句:(跳出循環(huán))
- 在for、while、until等循環(huán)語句中,用于跳出當(dāng)前所在的循環(huán)體,執(zhí)行循環(huán)體后的語句
continue語句:(跳出本次循環(huán))
- 在for、while、until等循環(huán)語句中,用于跳出循環(huán)體內(nèi)余下的語句,重新判斷條件以便執(zhí)行下一次循環(huán)。
練習(xí):使用for循環(huán)實(shí)現(xiàn)批量添加用戶
#!/bin/bash for i in $(cat /root/) --》從列表文件讀取文件名 do useradd $iecho “123456”| passwd $i --stdin --》通過管道指定密碼UNAME done(ps:判斷用戶是否存在:id命令)
位置變量
(位置變量的最常用用法:bash 1.sh 變量1 變量2…)
預(yù)定義變量:
- $#:命令行中位置變量的個數(shù)
- $*:所有位置變量的內(nèi)容(較少使用)
- $@:所有位置變量的內(nèi)容
- $0:當(dāng)前執(zhí)行的進(jìn)程/程序名
- :當(dāng)前shell的PID值,echo
- :當(dāng)前shell的PID值,echo
- ; ps $$, 常用作臨時變量的后綴
- $?:上一條命令執(zhí)行后返回的狀態(tài),當(dāng)返回狀態(tài)值為0時表示執(zhí)行正常,非0值表示執(zhí)行異?;虺鲥e
- $RANDOM :隨機(jī)數(shù),可以作為臨時文件名
例:輸出0-9以內(nèi)的隨機(jī)數(shù)–》echo $((RANDOM%10))
輸出1-10以內(nèi)的隨機(jī)數(shù)–》echo $((RANDOM%10+1))
練習(xí): 輸出
$1 is aa,
$2 is bb,
$3 is cc,
$4 is dd,
$5 is ee
答案:
PS:
ping 命令
- -c 1 —》只ping一次。
- -i 0.2–》第一個包和第二個包之間間隔0.2s
- -w 2 --》只等待2s
例:
ping 172.30.132.123 &>/dev/null
重定向?qū)τ趐ing命令無用,執(zhí)行成功$?就返回0,不成功則返回1
根據(jù)IP地址檢查網(wǎng)絡(luò)中存活的主機(jī)IP(大范圍的掃描)
#!/bin/bash for r in 192.168.1.{1..254} doping -c1 -w1 "${ip}" &>/dev/null done arp -n|grep ether|tr -s ' '|cut -d' ' -f1關(guān)于ping命令的一個最經(jīng)典的腳本:
for i in {1..193} do( ping -c1 -w1 .$i &>/dev/nullif (( $?==0 ))thenecho ".$i up" >>2.txtelseecho ".$i down" >>3.txtfi )& --》這樣就把這一段放到后臺去執(zhí)行了,大大加快了速度。 done sleep 2 live_pc_num=`cat 2.txt|wc -l` down_pc_num=`cat 3.txt|wc -l` echo "there are $down_pc_num is down" echo "there are $live_pc_num is up" echo "list:" cat 2.txt rm -rf 2.txt 3.txtbreak語句
典型的while循環(huán):
加上break,可以跳出循環(huán):
#!/bin/bash i=1 while : doecho "$i"(( i++ ))if (( i==20000 )) --》輸出的只有1-19999thenbreakfi done小結(jié)
- break:跳出整個循環(huán)
- exit:跳出腳本
- continue:跳出本次循環(huán),接著執(zhí)行下一次循環(huán)
案例練習(xí)9:
批量添加用戶并且滿足以下要求:
答案:
#!/bin/bash read -p "請輸入用戶名的前綴:" a read -p "請輸入用戶的數(shù)目:" num if (( $num<=10 )) thenn=0for i in `seq $num`doif useradd $a$i &>/dev/nullthenecho "用戶$a$i創(chuàng)建成功!"(( n++ ))echo "123456"|passwd $a$i --stdin &>/dev/nullfidoneecho "一共創(chuàng)建的用戶數(shù):$n個" elseecho "最多只能創(chuàng)建10個用戶啦!" fi?到此這篇關(guān)于shell中的for循環(huán)用法詳解的文章就介紹到這了,更多相關(guān)shell for循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
總結(jié)
以上是生活随笔為你收集整理的csh for循环_shell中的for循环用法详解_linux shell的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于mysql优化_MYSQL---关于
- 下一篇: MySQL 七天 学_7天玩转