Linux第六天 shell
shell指令碼必須以#!/bin/bash/開頭 (相當於c語言 #include<stdio.h>),shell指令碼檔案字尾為sh,沒有也行,Linux對字尾沒明確要求
指令碼需要有可執行許可權(chmod賦予許可權),那樣可以用./shell檔案 執行,不然就用sh shell檔案 執行(相對絕對路徑都可)
Linux Shell 中的變數分為,系統變數和使用者自定義變數。
系統變數:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等..
顯示當前 shell 中所有變數:set
定義變數用 變數名=值,等號兩側不能有空格,變數名一般用大寫字母定義(只是規範,小寫的也可以執行),輸出變數需要加上$輸出,例:A=100 echo $A
撤銷用unset 變數名
readonly定義靜態變數 靜態變數不可撤銷
註釋:單行用#,
多行用
:<<!
註釋內容
!
用反引號獲取返回值 例 A='date',A=$(date) 等價於反引號
設定環境變數(定義全域性變數在在/etc/profile檔案中寫)
1) export 變數名=變數值 (功能描述:將 shell 變數輸出為環境變數/全域性變數)
2) source 配置檔案 (功能描述:讓修改後的配置資訊立即生效)
3) echo $變數名 (功能描述:查詢環境變數的值)
位置引數變數
介紹:當我們執行一個 shell 指令碼時,如果希望獲取到命令列的引數資訊,就可以使用到位置引數變數
比如 : ./myshell.sh 100 200 , 這個就是一個執行 shell 的命令列,可以在 myshell 指令碼中獲取到引數資訊(相當於其它語言的函式傳參)
語法:$n (功能描述:n 為數字,$0 代表命令本身,$1-$9 代表第一到第九個引數,十以上的引數,十以上的引數需要用
大括號包含,如${10})
$* (功能描述:這個變數代表命令列中所有的引數,$*把所有的引數看成一個整體)
$@(功能描述:這個變數也代表命令列中所有的引數,不過$@把每個引數區分對待)
$#(功能描述:這個變數代表命令列中所有引數的個數)
運算子
基本語法
1) “$((運算式))”或“$[運算式]”或者 expr m + n
2) 注意 expr 運算子間要有空格, 如果希望將 expr 的結果賦給某個變數,使用 ``
3) expr m - n
4) expr \*, /, % 乘,除,取餘
#!/bin/bash #案例 1:計算(2+3)X4 的值 #使用第一種方式 RES1=$(((2+3)*4)) echo "res1=$RES1"
#使用第二種方式, 推薦使用 RES2=$[(2+3)*4] echo "res2=$RES2"
#使用第三種方式 expr TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
條件判斷
判斷語句
基本語法
[ condition ](注意 condition 前後要有空格)
#非空返回 true,可使用$?驗證(0 為 true,>1 為 false)
應用例項
[ asd ] 返回 true
[ ] 返回 false
[ condition ] && echo OK || echo notok 條件滿足,執行後面的語句
判斷語句
常用判斷條件
1) = 字串比較
2) 兩個整數的比較
-lt 小於
-le 小於等於 little equal -eq 等於
-gt 大於
-ge 大於等於
-ne 不等於
3) 按照檔案許可權進行判斷
-r 有讀的許可權
-w 有寫的許可權
-x 有執行的許可權
4) 按照檔案型別進行判斷
-f 檔案存在並且是一個常規的檔案
-e 檔案存在
-d 檔案存在並是一個目錄
if判斷基本語法
if [ 條件判斷式 ]
then
程式碼
elif [條件判斷式]
then
程式碼
fi
case語句
for迴圈
while語句(while 和 [有空格,條件判斷式和 [也有空格)
#!/bin/bash #案例 1 :從命令列輸入一個數 n,統計從 1+..+ n 的值是多少? SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] #i 自增 i=$[$i+1] done echo "執行結果=$SUM"
read 讀取控制檯輸入
基本語法
read(選項)(引數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了。。
引數
變數:指定讀取值的變數名
#!/bin/bash #案例 1:讀取控制檯輸入一個 NUM1 值 read -p "請輸入一個數 NUM1=" NUM1 echo "你輸入的 NUM1=$NUM1" #案例 2:讀取控制檯輸入一個 NUM2 值,在 10 秒內輸入。 read -t 10 -p "請輸入一個數 NUM2=" NUM2 echo "你輸入的 NUM2=$NUM2"
自定義函式
#!/bin/bash/ #定義函式 getSum function getSum() { SUM=$[$n1+$n2] echo "和是=$SUM" } #輸入兩個值 read -p "請輸入一個數 n1=" n1 read -p "請輸入一個數 n2=" n2 #呼叫自定義函式 getSum $n1 $n2