邏輯比較符号
-eq //等于
-ne //不等于
-gt //大于 (greater )
-lt //小于 (less)
-ge //大于等于
-le //小于等于
指令的邏輯關系:
- 在linux 中 指令執行狀态:0 為真,其他為假
邏輯與: &&
- 第一個條件為假時,第二條件不用再判斷,最終結果已經有;第一個條件為真時,第二條件必須得判斷;
- 邏輯或: ||
- 邏輯非: !
shell 中 while 的使用
- 利用while循環計算1到100的和:
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
let sum=sum+$i
let i++
done
echo $sum
- 利用while循環列印一個5x5的 *
#!/bin/bash
i=1
j=1
while [ $i -le 5 ]
do
while [ $j -le 5 ]
do
echo -n "* "
let j++
done
echo
let i++
let j=1
done
- 使用read結合while循環讀取文本檔案:
#!/bin/bash
file=$1 #将位置參數1的檔案名複制給file
if [ $# -lt 1 ];then #判斷使用者是否輸入了位置參數
echo "Usage:$0 filepath"
exit
fi
while read -r line #從file檔案中讀取檔案内容指派給line(使用參數r會屏蔽文本中的特殊符号,隻做輸出不做轉譯)
do
echo $line #輸出檔案内容
done < $file
- 按列讀取檔案内容
#!/bin/bash
file=$1
if [[ $# -lt 1 ]]
then
echo "Usage: $0 please enter you filepath"
exit
fi
while read -r f1 f2 f3 #将檔案内容分為三列
do
echo "file 1:$f1 ===> file 2:$f2 ===> file 3:$f3" #按列輸出檔案内容
done < "$file"
- while循環中的死循環:
- 示例:利用死循環,讓使用者做選擇,根據客戶的選擇列印相應結果
#!/bin/bash
#列印菜單
while :
do
echo "********************"
echo " menu "
echo "1.tima and date"
echo "2.system info"
echo "3.uesrs are doing"
echo "4.exit"
echo "********************"
read -p "enter you choice [1-4]:" choice
#根據客戶的選擇做相應的操作
case $choice in
1)
echo "today is `date +%Y-%m-%d`"
echo "time is `date +%H:%M:%S`"
read -p "press [enter] key to continue..." Key #暫停循環,提示客戶按enter鍵繼續
;;
2)
uname -r
read -p "press [enter] key to continue..." Key
;;
3)
w
read -p "press [enter] key to continue..." Key
;;
4)
echo "Bye!"
exit 0
;;
*)
echo "error"
read -p "press [enter] key to continue..." Key
;;
esac
done
linux 下 EOF 的寫法
- EOF是 END Of File 的縮寫,表示自定義終止符.既然自定義,那麼EOF就不是固定的,可以随意設定别名,在linux按ctrl-d就代表EOF.
- EOF一般會配合cat能夠多行文本輸出.
其用法如下:
<<EOF //開始
…
EOF //結束
- 還可以自定義,比如自定義:
<<BBB //開始
…
BBB //結束
- 通過cat配合重定向能夠生成檔案并追加操作,在它之前先熟悉幾個特殊符号:
< :輸入重定向
> :輸出重定向
>> :輸出重定向,進行追加,不會覆寫之前内容
<< :标準輸入來自指令行的一對分隔号的中間内容.
Shell 中的 $0, $#, $*, $@, $?, $$和指令行參數
- 位置參數
$0 目前腳本的檔案名
$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$# 傳遞給腳本或函數的參數個數。
$* 傳遞給腳本或函數的所有參數。
$@ 傳遞給腳本或函數的所有參數。被雙引号(" ")包含時,與 $* 稍有不同,下面将會講到。
$? 上個指令的退出狀态,或函數的傳回值。
$$ 目前Shell程序ID。對于 Shell 腳本,就是這些腳本所在的程序ID。
- $* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引号(" “)包含時,都以”$1" “ 2 " … " 2" … " 2"…"n” 的形式輸出所有參數。
- 但是當它們被雙引号(" “)包含時,”$*" 會将所有的參數作為一個整體,以"$1 $2 … n " 的 形 式 輸 出 所 有 參 數 ; " n"的形式輸出所有參數;" n"的形式輸出所有參數;"@" 會将各個參數分開,以"$1" “ 2 " … " 2" … " 2"…"n” 的形式輸出所有參數。
- 退出狀态
- $? 可以擷取上一個指令的退出狀态。所謂退出狀态,就是上一個指令執行後的傳回結果。退出狀态是一個數字,一般情況下,大部分指令執行成功會傳回 0,失敗傳回 1。