知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
#!/bin/bash for i in 1 2 3 4 5 do echo "Welcome $i times" done for i in $( ls ); do echo item: $i done for i in `seq 1 10`; do echo $i done for i in {1..5} do echo "Welcome $i times" done for (( c=1; c<=5; c++ )) do echo "Welcome $c times..." done for ((i=1; $i<=9;i++)); do echo $i; done
for i in {0..10..2} do echo "Welcome $i times" done for i in $(seq 1 2 20) do echo "Welcome $i times" done
單行實例
for ip in {1..10};do echo $ip; done for i in `seq 1 10`;do echo $i;done for ip in {81..92}; do ssh root@172.16.3.$ip date; done for n in {23..32} {49,50} {81..92}; do mkdir /tmp/$n; echo $n; done
for keyword in bash cmd ls do echo $keyword done string="aaa bbb ccc ddd" && for word in $string; do echo "$word"; done files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) for file in "${files[@]}" do echo $file done
infinite loops
#!/bin/bash for (( ; ; )) do echo "infinite loops [ hit CTRL+C to stop]" done
find file
#!/bin/bash for file in /etc/* do if [ "${file}" == "/etc/resolv.conf" ] then countNameservers=$(grep -c nameserver /etc/resolv.conf) echo "Total ${countNameservers} nameservers defined in ${file}" break fi done
backup file
#!/bin/bash FILES="$@" for f in $FILES do # if .bak backup file exists, read next file if [ -f ${f}.bak ] then echo "Skiping $f file..." continue # read next file and skip cp command fi # we are hear means no backup file exists, just use cp command to copy file /bin/cp $f $f.bak done
for n in {23..32} {49,50} {81..92}; do mkdir /tmp/$n; echo $n; done
#!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done
while read name age do echo $name $age done << EOF neo 30 jam 31 john 29 EOF while read name age do [[ $age -gt 30 ]] && echo $name done << EOF neo 30 jam 31 john 29 EOF
$ cat mount.sh #!/bin/sh while read LINE do s=`echo $LINE|awk '{print $1}'` d=`echo $LINE|awk '{print $2}'` umount -f $d mount -t nfs4 $s $d done < mount.conf $ cat mount.conf 172.16.0.1:/ /www/logs/1 172.16.0.2:/ /www/logs/2 172.16.0.3:/ /www/logs/3 172.16.0.4:/ /www/logs/4 172.16.0.5:/ /www/logs/5
讀一行
while IFS='' read -r line || [[ -n "$line" ]]; do echo "Text read from file: $line" done < "$1"