Shell 編程總結

Shell 編程總結
變量
基本概念
Shell變量的名稱與C語言一樣,由數字、字母、下劃線組成,其中只能以字母或下劃線開頭
變量可以爲空值,null
賦值時,=兩邊沒有空格
例如:

str=”abc”
a=1
變量的值如果含空格,賦值時用雙引號括起來
str=”Hello World!”
一般通配符
星號(*)
功能:匹配任意字符的出現。
*file 匹配 .profile?
/etc目錄下*.c文件的匹配模式:
/etc*.c ?
/etc/*.c? (√)
.和/必須顯示匹配
問號(?)
功能:匹配任意一個字符。
方括號([ ])
功能:匹配括號內所限定的任何一個字符
如: f[abcd]匹配fa、fb、fc、fd
雙引號”
功能:雙引號括起來的字符作爲普通字符對待;
$ 、 倒引號、反斜線 \ 這三個仍保留其特殊功能;
$表示變量替換,用預先指定的變量值代替$和變量
倒引號表示命令替換,
\反斜線在後面字符是$、、”、\、換行符之一時,表示轉義字符,即不對後面字符特殊處理
算術運算:expr命令
功能
該命令提供算術運算功能,並能對數字或非數字字符串進行計算。
expr命令將參數作爲表達式,計算該表達式並將結果顯示在標準輸出設備上。
例如:(注意運算符左右都有空格!)
expr 10 + 10
expr 20 / 5
expr $a + $b
字符*(乘)在shell中有特殊含義,因此他們的前面必須有轉義字符“\”
如:expr 2 \* 5
當有變量參與運算時,需要在變量名前面加“$”
如:a=11
expr $a \% 2
表達式只能返回真或假 
條件表達式:
[ expression ] 這種更常用 表達式兩端必須有空格
test expression
整數大小比較:
-eq 等於 [ $1 -eq $2 ] 參數1與參數2比較是否相等
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
邏輯關係:在linux 中 命令執行狀態 0 爲真,其他爲假
邏輯與: && 
第一個條件爲假時,第二條件不用再判斷,最終結果已經有; 
第一個條件爲真時,第二條件必須得判斷; 
邏輯或: || 
第一個條件爲真時,第二條件不用再判斷,最終結果已經有; 
第一個條件爲假時,第二條件必須得判斷; 
邏輯非: !
還是對上一個例子加一下邏輯判斷
1 #!/bin/bash
2 [ ! $# -eq 1 ] && echo "args are error" && exit 5
3 id $1 &>/dev/null && echo "User $1 exit." && exit 2
4 id $1 &>/dev/null || useradd $1
5 id $1 &>/dev/null && echo "$1" | passwd --stdin $1 &>/dev/null && echo "Add User $1 success!"
第二行 使用了條件判斷 $# 特殊變量 獲得參數個數 如果不爲1 打印提示信息 並 退出;
第三行 id $1 查看用戶名爲$1的用戶信息 結果放入null中,若用戶存在返回狀態爲0,邏輯判斷爲真,由於是邏輯與判斷,仍然會執行後面的命令,打印用戶已存在的提示,並退出,此時可以看出通過運用邏輯與的執行特性,替代完成了if else的判斷邏輯即:用戶存在,給提示,並退出,不存在,繼續執行。
第四行代碼使用了邏輯或命令,用戶不存在 返回狀態碼非0,邏輯判斷爲假,對於邏輯或,當第一個判斷爲假的時候,仍要執行第二個邏輯判斷,所以,會執行後面的添加用戶操作。
第五行 使用邏輯與命令,當用戶存在的時候 設置密碼 並打印提示信息,用戶添加完成
接着上面的要求,添加完成之後計算系統一共有多個用戶。
1 #!/bin/bash
2 [ ! $# -eq 1 ] && echo "args are error" && exit 5
3 id $1 &>/dev/null && echo "User $1 exit." && exit 2
4 id $1 &>/dev/null || useradd $1
5 id $1 &>/dev/null && echo "$1" | passwd --stdin $1 &>/dev/null && echo "Add User $1 success!"
6 COUNT=
wc -l /etc/passwd | awk ‘{print $1}’
7 echo "total Users are $COUNT"
第六行 定義一個變量 使用COUNT變量來定義用戶總數,所有的命令要用反引號“括起來,使用awk切割字符串,得到用戶數量 
第七行 打印用戶數量
if判斷
If 條件 ;then 
語句 
elif 條件 ; then 
語句 
else 
語句 
fi 
當then與if同行的時候 之間需要加分號;否則不需要加,最後結束條件判斷要加fi 代表結束。
在if判斷中的邏輯符號: 
-a 與判斷 
-o 或判斷
做如下例子,如果/etc/inittab文件的行數大於50,就顯示好大的文件;
1 #!/bin/bash
2
3 C=
wc -l /etc/inittab | cut -d’ ’ -f1`
4 if [ $C -gt 50 ];then
5 echo “big file.”
6 else
7 echo “small file.”
8 fi
If…then…else控制結構
通過例題來對If…then…else 結構進行講解
//參數個數爲0時,輸出“you must input at least one arg”;不爲0時,輸出“correct arg number.”

if [ $# -eq 0 ]
then
echo “you must input at least one arg”
else
echo “correct arg number”
Fi
if - then - elif結構
if [ condition_1 ]
then
commands_1
elif [ condition_2 ]
then
commands_2
else
commands_n
Fi
例題:輸入的命令行第一個參數必須是hello時,程序結果顯示”hello!how are you?”;否則,如果第一個參數爲空,則顯示” you must input parameters”;其他情況時,顯示”The only accept parameter is hello”

if [ “1=hello]thenechohello!howareyou?elif[ 1” = “” ]
then
echo “you must input parameters”
else
echo “The only accept parameter is hello”
Fi
三大循環
While循環
例題:從一加到10求和
Echo count=1
while [ countlt10]doecho count
let count=count+1
done
echo “End!”
Until 循環
例題:從10加到一
result=0
num=10
until [ numeq0]do((result=result+num))((num=num1))doneechotheresultis result.”
For 循環
例題打印9*9 乘法表
For (( i=1; i<=9; i++ ))
Do
For(( j=1; j<=i; j++ ))
Do
Echo -n “i j = (( i * j))DoneEchoDoneEchoend!i=1;until((i>9))doletj=1;until((j>i))dolettemp=ijechone i*j= temp\t”
let j++;
done
let i++;
echo “”
done
echo “end”

i=1;
while((i<=9))
do
j=1;
while((j<=i))
do
let “sum=i*j”
echo -ne “i j=$sum\t”
let j++;
done
echo “”
let i++;
done
echo “end”
謝謝大家的觀看。希望能幫助到大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章