結構化命令 for while

1.for 循環命令

domo1 從文本中讀取,以空格隔開

#!/bin/bash
# basic for commond

for test in Alabama Ariaon Arkani Califorin
do
     echo the text state is $test
done
//
hadoop@master:~/shell_test$ ./test1
the text state is Alabama
the text state is Ariaon
the text state is Arkani
the text state is Califorin
**如果遇到單引號,會把單引號之間的值作為一個單詞,因此或者
轉義,或者用雙引號把有單引號的單詞括起來**

demo2
從變量中讀取列表

#!/bin/bash
# get word form list

list="Abal fdfd bdfd sfdc ddddd"
list=$list" Connecticut"

for state in $list
do
    echo "Have you ever visted $state"
done
//
hadoop@master:~/shell_test$ ./test2
Have you ever visted Abal
Have you ever visted fdfd
Have you ever visted bdfd
Have you ever visted sfdc
Have you ever visted ddddd
Have you ever visted Connecticut
注意:等號左右不能有空格

demo3 從命令行讀取值

#!/bin/bash
#read values form a file

file="test1"

for state in `cat $file`
do
        echo "Visit beatuful $state"
done
//
hadoop@master:~/shell_test$ ./test3
Visit beatuful #!/bin/bash
Visit beatuful #
Visit beatuful basic
Visit beatuful for
Visit beatuful commond
Visit beatuful for
Visit beatuful test
Visit beatuful in
Visit beatuful Alabama

demo 4
更改變量分割符號

#!/bin/bash
#read values form a file

file="test1"

IFS=$'\n'

for state in `cat $file`
do
        echo "Visit beatuful $state"
done

//
hadoop@master:~/shell_test$ ./test4
Visit beatuful #!/bin/bash
Visit beatuful # basic for commond
Visit beatuful for test in Alabama Ariaon Arkani Califorin 
Visit beatuful do
Visit beatuful      echo the text state is $test
Visit beatuful done
注意:
如果在一個地方用了默認值,其他地方再修改回來,可以這樣設置
IFS.OLD=$IFS
IFS=$'\n'
//其他代碼
IFS=$IFS.OLD
可以指定多個的
IFS=$'\n:;"'
demo5 用通配符讀取目錄
#!/bin/bash
#iterating from multiple directories

for file in /home/hadoop/*
do
        if [ -d "$file" ]
        then
                echo "$file is a directory"

        elif [ -f "$file" ]
        then
                echo "$file is a File"
        else
                echo "$file does'not exist"
        fi
done

//
hadoop@master:~/shell_test$ pwd
/home/hadoop/shell_test
hadoop@master:~/shell_test$ vi test5
hadoop@master:~/shell_test$ ./test5
/home/hadoop/apache-flume-1.6.0-bin is a directory
/home/hadoop/apache-flume-1.6.0-bin.tar.gz is a File
/home/hadoop/apache-maven-3.3.3 is a directory
/home/hadoop/eclipse is a directory
/home/hadoop/file1 is a File
/home/hadoop/hadoop-2.7.1 is a directory
...
...
注意:
還可以合并多個for目錄
for file in /home/hadoop/* /home/chenhang/* 

C語言風格的for循環

#!/bin/bash
#multiple variable for c

for (( a=1, b=10; a <=10; a++,b-- ))
do
        echo "$a - $b"
done

//hadoop@master:~/shell_test$ ./test6
1 - 10
2 - 9
3 - 8
4 - 7
5 - 6
6 - 5
7 - 4
8 - 3
9 - 2
10 - 1

2.while 循環 util 命令和while命令相反

#!/bin/bash
#while demo test

var1=10

while echo $var1
        [ $var1 -ge 0 ]
do
        echo "this is inside the loop"
        var1=$[ $var1 -1 ]
done

//
hadoop@master:~/shell_test/while$ ./test1
10
this is inside the loop
9
this is inside the loop
8
this is inside the loop
7
this is inside the loop
6
this is inside the loop
5
this is inside the loop
4
this is inside the loop
3
this is inside the loop
2
this is inside the loop
1
this is inside the loop
0
this is inside the loop
-1

demo2
循環嵌套處理文件數據例子

#!/bin/bash
# circle change fiel content

IFS.OLD=$IFS
IFS=$'\n'
for entry in `cat /etc/passwd`
do
        echo "values in $entry"
        IFS=:
        for value in $entry
        do
                echo " $value"
        done
done
//
hadoop@master:~/shell_test/while$ ./test2
./test2: 行 4: IFS.OLD=: 未找到命令
values in root:x:0:0:root:/root:/bin/bash
 root
 x
 0
 0
 root
 /root
 /bin/bash
values in daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
 daemon
 x
 1
 1
 daemon
 /usr/sbin
 /usr/sbin/nologin

demo3
控制循環語句 break 和continue
break 2 是跳出2層,默認為1

#!/bin/bash
#skip outer loop

for (( a = 1; a<4; a++ ))
do
        echo "OUter loop : $a"
        for (( b= 1; b <100; b++))
        do
                if [ $b -gt 4 ]
                then
                        break 2
                fi
                echo "  INner loop $b"
        done
done

//
hadoop@master:~/shell_test/while$ ./test3
OUter loop : 1
  INner loop 1
  INner loop 2
  INner loop 3
  INner loop 4

demo 4
處理for循環的輸出,重定向到文件或者程序

#!/bin/bash
#piping a loop to another file

for (( a = 1; a<10 ; a++ ))
do
    echo "number is $a"
done > text.txt
echo "the commond is finished"

//hadoop@master:~/shell_test/while$ cat text.txt
number is 1
number is 2
number is 3
number is 4
number is 5
number is 6
number is 7
number is 8
number is 9

重定向到程序

#!/bin/bash
#piping a loop to annoter command

for state in "northr annia" Connjre jfdl9 Alabama Tennes
do
    echo "$state is the next palce to go "
done | sort
echo "this completes our travels"

//
hadoop@master:~/shell_test/while$ ./test5
Alabama is the next palce to go 
Connjre is the next palce to go 
jfdl9 is the next palce to go 
northr annia is the next palce to go 
Tennes is the next palce to go 
this completes our travels

跟新

1.遍歷多個值,可以set -- $planet 分割
#!/bin/bash
echo "$@"
for planet in "mercury 36"  "venus 67"
do
        set -- $planet
        echo "$1   $2,000,000 miles form sun"
done
exit 0

一個遍歷文件的demo

#!/bin/bash
# fileinfo.sh

FILES="/usr/sbin/accept
/usr/sbin/pwck
/usr/sbin/chroot
/usr/bin/fakefile
/sbin/badblocks
/sbin/ypbind"     # List of files you are curious about.
                  # Threw in a dummy file, /usr/bin/fakefile.

echo

for file in $FILES
do

  if [ ! -e "$file" ]       # Check if file exists.
  then
    echo "$file does not exist."; echo
    continue                # On to next.
   fi

  ls -l $file | awk '{ print $8 "         file size: " $5 }'  # Print 2 fields.
  whatis `basename $file`   # File info.
  # Note that the whatis database needs to have been set up for this to work.
  # To do this, as root run /usr/bin/makewhatis.
  echo
done  

exit 0

當遍歷文件時候可以用?和*

#!/bin/bash

filename="*txt"

for file in $filename
do
 echo "Contents of $file"
 echo "---"
 cat "$file"
 echo
done

沒有in的for 默認 $@


#!/bin/bash
for a
do
 echo -n "$a "
done
#  The 'in list' missing, therefore the loop operates on '$@'
#+ (command-line argument list, including whitespace).

echo

exit 0

列出系統的用戶名字

#!/bin/bash
#userlist.sh

PASSWORD_FILE=/etc/passwd
n=1           # User number

for name in $(awk 'BEGIN{FS=":"}{print $1}' < "$PASSWORD_FILE" )
# Field separator = :    ^^^^^^
# Print first field              ^^^^^^^^
# Get input from password file  /etc/passwd  ^^^^^^^^^^^^^^^^^
do
  echo "USER #$n = $name"
  let "n += 1"
done


# USER #1 = root
# USER #2 = bin
# USER #3 = daemon
# ...
# USER #33 = bozo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容