1. 程式人生 > 其它 >第一個專案:吃貨聯盟點餐系統

第一個專案:吃貨聯盟點餐系統

技術標籤:筆記

Shell指令碼

  • 以一個操作執行多個命令

基本語法

開頭

#!/bin/bash必須放在檔案的第一行

執行

  1. $. / hell. sh
  2. $ bash hell. sh
  3. 把/home/Linux/shell 目錄新增到整個環境變數中
    export PATH=/home/Linux/shell:$PATH
    ./ hello. sh

註釋 用“#”

變數

自定義變數

  • 變數沒有型別,任何複製給變數的值,都被解釋為字串
  • 變數不需要定義
  • 變數賦值時,等號兩邊都沒有空格
  • 取用變數的值 在變數名前加“$”符號

位置引數

由系統提供的引數

  1. $0 程式的名字,與鍵入的命令一樣,包含指令碼檔名
  2. $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
  1. break
    break n :表示跳出第n層
  2. continue