国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Linux Shell > 正文

shell中的for循環用法詳解

2020-07-26 23:25:23
字體:
來源:轉載
供稿:網友

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/bashj=$1for ((i=1; i<=j; i++))dotouch file$i && echo file $i is okdone
  • $@: 所有位置變量的內容
  • $#: 位置變量的個數
  • $0: 文件名
  • $*: 所有位置變量的內容

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

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

練習1:編寫腳本清空所有arp緩存記錄:

#!/bin/bashfor i in $(arp | tail -n +2|tr -s ' ' |cut -d' ' -f1)do  arp -d $idone

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

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

方法2:

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

練習3:倒數五秒:

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

方法2:

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

練習4:批量添加用戶:

#!/bin/bashfor i in $(cat /root/users.txt)    --》從列表文件讀取文件名do  useradd $i  echo "123456" | passwd --stdin $i --》通過管道指定密碼字串done

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

#/bin/bashu_uid=(`cat /etc/passwd | awk -F: '{print $3}'`)u_name=(`cat /etc/passwd | awk -F: '{print $1}'`)for i in `seq ${#u_uid[@] }`do  if (( ${u_uid[i-1]} > 10000 ))  then      userdel -r ${u_name[i-1]}&&echo "${u_name[i-1]} delete ok"  fidone

方法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/bashfor i in $(cat /root/users.txt) --》從列表文件讀取文件名do    useradd $i  echo “123456”| passwd $i --stdin  --》通過管道指定密碼UNAMEdone

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

位置變量

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

(位置變量的最常用用法:bash 1.sh 變量1 變量2…)

預定義變量:

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

例:輸出0-9以內的隨機數

主站蜘蛛池模板: 苏尼特右旗| 贵定县| 黔东| 临洮县| 千阳县| 屏山县| 黔西| 琼中| 靖江市| 辽阳县| 迭部县| 社会| 临沧市| 峨眉山市| 无为县| 三门县| 林西县| 大理市| 含山县| 隆子县| 读书| 扎鲁特旗| 赤壁市| 新郑市| 登封市| 封开县| 双峰县| 巴南区| 米脂县| 百色市| 四会市| 巴中市| 庆安县| 彭阳县| 江门市| 平昌县| 枣庄市| 汝阳县| 兴化市| 天祝| 工布江达县|