第一個專案:吃貨聯盟點餐系統
阿新 • • 發佈:2020-12-09
技術標籤:筆記
Shell指令碼
- 以一個操作執行多個命令
基本語法
開頭
#!/bin/bash
必須放在檔案的第一行
執行
- $. / hell. sh
- $ bash hell. sh
- 把/home/Linux/shell 目錄新增到整個環境變數中
export PATH=/home/Linux/shell:$PATH
./ hello. sh
註釋 用“#”
變數
自定義變數
- 變數沒有型別,任何複製給變數的值,都被解釋為字串
- 變數不需要定義
- 變數賦值時,等號兩邊都沒有空格
- 取用變數的值 在變數名前加“$”符號
位置引數
由系統提供的引數
- $0 程式的名字,與鍵入的命令一樣,包含指令碼檔名
- $1-$9分別包含第一個到第九個命令列引數
預定義變數
預定義變數:shell一開始就定義了的變數,是由$符號和另外一個符號組成的
- $# 包含命令列引數的個數
- $? 包含前一個命令的狀態,正常退出返回0,反之返回非0值
- $* 包含所有命令列引數
- $$ 包含正在執行程序的ID號
環境變數
- 傳統上,環境變數均為大寫,在使用前,必須用export命令匯出
- env命令可顯示所有的環境變數
- set 命令顯示出所有本地定義的shell變數
- unset清楚環境變數
Shell程式和語句
shell語句包含3類:說明性語句、功能性語句、結構性語句
說明行語句-註釋
功能性語句
1.鍵盤讀入變數值
變數的值作為字串從鍵盤讀入
格式:read 變數
read a b c
變數間以空格隔開
echo $a $b $c
a:代表輸入的第一個單詞,b:代表輸入的第二個單詞,c:代表其餘的所有單詞
2.算術運算命令 expr
- expr 主要用於進行簡單的整數運算
z = `expr $x +$y` "`":反引號
1 #!/bin/bash
2
3 echo "please input two numbers:"
4 read var1
5 read var2
6
7 add=`expr $var1 + $var2`
8 sub=`expr $var1 - $var2`
9 mul=`expr $var1 \* $var2`
10 div=`expr $var1 / $var2`
11 mod=`expr $var $var1 % $var2`
12
13 echo '$var1+$var2'=$add
14 echo '$var1-$var2'=$sub
15 echo '$var1*$var2'=$mul
16 echo '$var1/$var2'=$div
17 echo '$var1%$var2'=$mod
注意: 1.在執行.sh檔案之前,需要先賦予檔案使用者可執行的許可權 sudo chmod a+x test.sh 2.賦值語句“=”前後一定不能有空格
3.test測試命令
三種測試物件:字串、整數、檔案屬性
字串測試
s1 = s2 是否相等
s1 != s2 是否由差異
-z s1 測試字串長度是否為0
-n s1 測試字串的長度是否不為0
注意:"["後面,和“]”前面都應該有空格,等號“=”兩邊也要有空格
整數測試
a -eq b : 是否相等
a -ne b : 是否不等
a -gt b : a是否大於b
a -ge b : 大於等於
a -lt b : 小於
a -le b : :小於等於
1 #!/bin/bash
2
3 read x y
4 if test $x -eq $y #等價於if [ $x -eq $y ]
5 then
6 echo "$x=$y"
7 else
8 echo "$x!=$y"
9 fi
檔案測試
-d name 測試name是否為一個目錄
-f 是否為普通檔案
-L 是否為符號連結
-r 是否存在且可讀
-w 是否存在且可寫
-x 是否存在且可執行
-s 是否存在且長度不為0
f1 -nt f2 f1是否比f2更新
f1 -ot f2 f1是否比f2更舊
1 #!/bin/bash
2
3 [ -f /home/farsight/Shell/test1.sh ]
4 echo $?
注意:執行結果返回引數 $?,返回1表示不存在,返回0表示存在
結構性語句
條件測試語句 if
if 表示式
then 命令表(可以是一條,也可以是多條)
fi
if 表示式
then 命令表1
else 命令表2
fi
if與fi是條件語句的語句括號,必須成對使用
多路分支語句 case
case 字串變數 in
模式1)
命令表1
;; #命令表以單獨的雙分號行結束,退出case語句
模式2)
命令表2
;;
...
模式n)
命令表n
;; #最後一個雙分號可以省略
注意:命令表以單獨的雙分號行結束,退出case語句,最後一個雙分號可以省略
多路分支語句 for
語句括號 do和done
for 變數名 in 單詞表
do
命令表(迴圈體)
done
- 變數依次取單詞表中的各個單詞,每取一次單詞,就執行一次迴圈體中的命令
- 迴圈次數又單詞表中的單詞數決定
- 如果單詞表是命令列上的所有位置引數時,可以在for中省略 in 單詞表
1 #!/bin/bash
2
3 if [ ! -d $HOME/backup ]
4 then
5 mkdir $HOME/backup
6 fi
7
8 flist='ls'
9 for file in $flist
10 do
11 if [ $# = 1 ]
12 then #命令列上有一個引數時
13 if [ $1 = $file ]
14 then
15 echo "$file found";exit
16 fi
17 else #命令列不帶引數時
18 cp $file $HOME/backup
19 echo "$file copied"
20 fi
21 done
22 echo ***backup Completed***
迴圈語句 while
while 命令或表示式
do
命令表
done
while語句的退出狀態為命令表中被執行的最後一條命令的退出狀態
迴圈控制語句 while
- break
break n :表示跳出第n層 - continue