結構化命令——流程控制,
注意:「命令」,非「關鍵字」
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...