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) do arp -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) do echo -en "$i";sleep 1 done echo -e "開始"
方法2:
#!/bin/bash echo "准備倒數5秒:" for i in $(seq 5 -1 1) do echo -en "\b$i";sleep 1 done echo -e "\b開始"
練習4:批量添加用戶:
#!/bin/bash for i in $(cat /root/users.txt) --》從列表文件讀取文件名 do useradd $i echo "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[@] }` do if (( ${u_uid[i-1]} > 10000 )) then userdel -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,}”
原文:https://blog.csdn.net/qq_18312025/article/details/78278989
-