shell 1 結構化命令 流程控制

2021-05-09 15:29:56 字數 4449 閱讀 1583

結構化命令——流程控制,

注意:「命令」,非「關鍵字」

1)簡單

if

if command                 

#command

返回成功——即退出狀態為

0 時為真

then

commands fi

等價於:

if command; then          #;

只是用於將

then

放到同一行

commands fi

2)完整格式的

if

if command; then

...elif command; then

...else

... fi

case $variable in

patten1|patten2)  command1s;;   #

使用|表多個可能,使用)

patten3) command2s;;                 #commands

最後的語句需使用;;

*) default commands;;                 #*)

表示default

esac

1)

簡單

for

for var in list; do   #

此處定義了變數

var ,所以不要使用$

...

done

eg:

for test in 12s 2 3 4aa           #test

不使用$ ,

12s 等不使用引號!引號用於將引起來的內容作為乙個整體 do

echo $test

done

2)

帶有引號時

for test in "12's" 2 3 4aa      

#用雙引號將單引號括起來,反過來也可以吧(

tbd ) do

echo $test

done

3)

帶有空格時

for test in "12 s" 2 3 4aa     

#同樣使用引號 do

echo $test

done

4)

使用變數列表

list="12 2 3 4aa"          tbd

:怎樣引用某個列表元素?

for test in $list do

echo $test

done

tbd :列表中有空格怎麼表示?沒找到辦法,改下

ifs 吧。

列表中增加元素

list=$list" abc"            

#使用引號並且要有空格

5)

bash用作分隔符的字元列表

$ifs

internal field seperator

,預設為空格、

tab、換行,將影響

for的處理——

tbd影響

gawk

的是否也是它?

ifs=$'/n'     

#更改ifs

list="12:2:3:4aa bb"

ifs=$': '       

#以:及空格作為

ifs

for test in $list do

echo $test

done

6)

遍歷檔案

for file in /home/test/*.log /home/aaa/ 

#可指定多個資料夾

eg:for test in /home/xgdxiao/* /home/noth/*

#必須使用萬用字元,不能簡單地寫個目錄名,可同時指定多個目錄 do

if [ -f $test ]; then         

#必須對檔案進行測試,否則可能輸出「

/home/noth/* 」

echo $test

elif [ -e $test ]; then

echo -n

else

echo $test is nth fi

done

7)

c式的

for

for((a = 1; a <10; a++)); do              #

格式比較自由,變數引用無須

$ ,可使用空格,無須轉義

echo $a

done

for((a=1, b=2; a<=1 && b> 0; a++,b--)); do  

#多個變數

echo $a $b

done

1)簡單形式:

while test command; do         #test command

含義同if 語句

...done

eg:

i=2

while [ $i -gt 0 ]; do

echo $i

i=$[$i -1 ]

done

2)多個條件,只有最後乙個用於判斷:

i=2

while echo $i; [ $i -gt 0 ]; do

i=$[$i -1 ]

done

1)一般形式

until test commands; do

...done

2)多個條件式,處理方式同

while

i=2

until echo $i; [ $i -gt 0 ]; do #

多條命令的處理與

while

類似 echo $i;

i=$[$i -1 ]

done

#!/bin/bash

#ifs.old=$ifs

ifs=$'/n'        #

控制下面

for

for sth in `cat /etc/passwd|grep root`; do

echo $sth

ifs=:           

#控制下面的

for

for ath in $sth; do

echo $ath

done

ifs=/n          

#需要還原

ifs

done

break n 

#跳出n

層迴圈,

n預設為1

continue n 

#要繼續的迴圈級別

while [ 1 ] ; do             #tbd:

是否可寫成

while 0 ; do

for((i=0; i<2; ++i)); do

echo $i

if [ $i -eq 1 ]; then

break 2 fi

done

done

迴圈裡的輸出重定向或管道

for((i=0; i<2; ++i)); do

echo $i

if [ $i -eq 1 ]; then   

break 2   

#超出總層次也沒關係 fi

done > a.txt   

#直接在迴圈後加重定向,

tbd ,錯誤輸出是否寫為

2>a.txt

for((i=0; i<200; ++i)); do

echo $i

done |more            

#管道

shell 命令和流程控制

shell 常用命令語法及功能 echo zhanqiong 將文字內容列印到螢幕上 ls 檔案列表 wc l file 計算檔案行數 wc w file 計算檔案單詞數 wc c filr 計算檔案字元數 cp sourcefile destfile 檔案拷貝 mv oldname newname...

shell 指令碼之程式流程控制命令(1)

if then elif else fi 語法 if expression then elif expression then then ommand list else else command list fi 用途 實現二路或多路跳轉 第一種if語句沒有任何可選擇特性,這決定了它通常用於二路跳 ...

shell程式設計學習 結構化if命令

格式 if comand then commands fi或者下種格式 if command then commands fi檢查command命令執行成功 則執行then後面的指令 格式 if command then commands else commands fi或者下述格式 if coma...