日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

csh for循环_shell中的for循环用法详解_linux shell

發布時間:2025/3/13 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 csh for循环_shell中的for循环用法详解_linux shell 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要介紹了shell中的for循環用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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 “$@” --》取所有位置參數,可簡寫為for i

注意:bash shell支持C式for循環

#!/bin/bash j=$1 for ((i=1; i<=j; i++)) do touch file$i && echo file $i is ok done
  • $@: 所有位置變量的內容
  • $#: 位置變量的個數
  • $0: 文件名
  • $*: 所有位置變量的內容

編寫腳本應該注意的事項:

  • 開頭指定使用什么shell,例如:bash,ksh,csh等
  • 腳本功能描述,使用方法,作者,版本,日期等
  • 變量名,函數名要有實際意義,函數名以動名詞形式,第二個單詞首字母要大寫。例如:updateConfig()
  • 縮進統一用4個空格,不用TAB
  • 取變量值使用大括號,如${varname}
  • 刪除文件時,如果路徑有變量的,要判斷變量有值,如rm -f ${abc}/* 如果變量abc沒有值,則會把根目錄下的文件刪除
  • 腳本中盡量不要使用cd變換目錄
  • 函數中也要有功能描述,使用依法,版本,日期等
  • 函數的功能要單一,不要太復雜
  • $()比` `更好
  • 盡量不要使用多層if語句,而應該以case語句替代
  • 如果需要執行確定次數的循環,應該用for語句替代while語句
  • 輸入的參數要有正確性判斷
  • 多加注釋,方便自己或他人閱讀。
  • 練習1:編寫腳本清空所有arp緩存記錄:

    #!/bin/bash for i in $(arp | tail -n +2|tr -s ' ' |cut -d' ' -f1) doarp -d $i done

    練習2:產生十個隨機數:
    方法1:

    for i in {0..9};do echo $RANDOM;done

    方法2:

    for i in $(seq 10);do echo $RANDOM;done

    練習3:倒數五秒:

    #!/bin/bash echo "準備倒數5秒:" for i in $(seq 5 -1 1) doecho -en "$i";sleep 1 done echo -e "開始"

    方法2:

    #!/bin/bash echo "準備倒數5秒:" for i in $(seq 5 -1 1) doecho -en "\b$i";sleep 1 done echo -e "\b開始"

    練習4:批量添加用戶:

    #!/bin/bash for i in $(cat /root/) --》從列表文件讀取文件名 douseradd $iecho "123456" | passwd --stdin $i --》通過管道指定密碼字串 done

    練習:
    查找出uid大于10000的用戶,然后刪除,必須使用for循環。

    #/bin/bash u_uid=(`cat /etc/passwd | awk -F: '{print $3}'`) u_name=(`cat /etc/passwd | awk -F: '{print $1}'`) for i in `seq ${#u_uid[@] }` doif (( ${u_uid[i-1]} > 10000 ))thenuserdel -r ${u_name[i-1]}&&echo "${u_name[i-1]} delete ok"fi done

    方法2:用正則找出大于10000的用戶:

    cat /etc/passwd | egrep “1[0-9]{4} | [2-9]{5,}”

    例子:根據ip地址檢查網絡中存活的主機ip。

    break語句:(跳出循環)

    • 在for、while、until等循環語句中,用于跳出當前所在的循環體,執行循環體后的語句

    continue語句:(跳出本次循環)

    • 在for、while、until等循環語句中,用于跳出循環體內余下的語句,重新判斷條件以便執行下一次循環。

    練習:使用for循環實現批量添加用戶

    #!/bin/bash for i in $(cat /root/) --》從列表文件讀取文件名 do useradd $iecho “123456”| passwd $i --stdin --》通過管道指定密碼UNAME done

    (ps:判斷用戶是否存在:id命令)

    位置變量

  • 位置變量:$n ,但是大于9的位置參數要用{}括起來:${10}
  • 位置變量的作用:其實就是傳遞參數到腳本里
  • $0 --》代表的是腳本自己的名字
  • (位置變量的最常用用法:bash 1.sh 變量1 變量2…)

    預定義變量:

    • $#:命令行中位置變量的個數
    • $*:所有位置變量的內容(較少使用)
    • $@:所有位置變量的內容
    • $0:當前執行的進程/程序名
    • :當前shell的PID值,echo
    • :當前shell的PID值,echo
    • ; ps $$, 常用作臨時變量的后綴
    • $?:上一條命令執行后返回的狀態,當返回狀態值為0時表示執行正常,非0值表示執行異?;虺鲥e
    • $RANDOM :隨機數,可以作為臨時文件名

    例:輸出0-9以內的隨機數–》echo $((RANDOM%10))
    輸出1-10以內的隨機數–》echo $((RANDOM%10+1))

    練習: 輸出
    $1 is aa,
    $2 is bb,
    $3 is cc,
    $4 is dd,
    $5 is ee
    答案:

    #!/bin/bash echo "there are $# arguments in this scripts" N=1 --》變量N用來計數 for i in $@ doecho "\$$N is $i"((N++)) done

    PS:
    ping 命令

    • -c 1 —》只ping一次。
    • -i 0.2–》第一個包和第二個包之間間隔0.2s
    • -w 2 --》只等待2s

    例:
    ping 172.30.132.123 &>/dev/null
    重定向對于ping命令無用,執行成功$?就返回0,不成功則返回1

    根據IP地址檢查網絡中存活的主機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

    關于ping命令的一個最經典的腳本:

    for i in {1..193} do( ping -c1 -w1 .$i &>/dev/nullif (( $?==0 ))thenecho ".$i up" >>2.txtelseecho ".$i down" >>3.txtfi )& --》這樣就把這一段放到后臺去執行了,大大加快了速度。 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.txt

    break語句
    典型的while循環:

    #!/bin/bash i=1 while : --》:等價為true doecho "$i"((i++))sleep 0.3 done 注:這是個死循環,會一直執行下去

    加上break,可以跳出循環:

    #!/bin/bash i=1 while : doecho "$i"(( i++ ))if (( i==20000 )) --》輸出的只有1-19999thenbreakfi done

    小結

    • break:跳出整個循環
    • exit:跳出腳本
    • continue:跳出本次循環,接著執行下一次循環

    案例練習9:
    批量添加用戶并且滿足以下要求:

    答案:

    #!/bin/bash read -p "請輸入用戶名的前綴:" a read -p "請輸入用戶的數目:" num if (( $num<=10 )) thenn=0for i in `seq $num`doif useradd $a$i &>/dev/nullthenecho "用戶$a$i創建成功!"(( n++ ))echo "123456"|passwd $a$i --stdin &>/dev/nullfidoneecho "一共創建的用戶數:$n個" elseecho "最多只能創建10個用戶啦!" fi

    ?到此這篇關于shell中的for循環用法詳解的文章就介紹到這了,更多相關shell for循環內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

    總結

    以上是生活随笔為你收集整理的csh for循环_shell中的for循环用法详解_linux shell的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。