Shell是一個命令行解釋器,它爲用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用戶Shell來啓動、掛起、停止、甚至編寫一個程序。
編寫第一個Shell腳本
運行Shell腳本
1.將Shell腳本作爲程序運行
2.將Shell腳本作爲參數傳遞給Bash解釋器(通過這種方式運行腳本,不需要在腳本文件的第一行指定解釋器信息)
3.通過source命令執行腳本文件(linux下的source命令)
變量定義
-
Shell定義變量: 變量名=值(=兩邊不能有空格) 值 不包含任何空白符(例如空格、Tab 縮進等),那麼可以不使用引號 值 包含了空白符,那麼就必須使用引號包圍起來
-
變量定義規則 變量名由數字、字母、下劃線組成 必須以字母或者下劃線開頭 不能使用 Shell 裏的關鍵字,並且一般爲大寫
設置環境變量
在另外一個shell程序中使用TOMCAT_HOME
位置參數變量
運行 Shell 腳本文件時我們可以給它傳遞一些參數,就可以使用位置參數變量。例如:./myshell.sh 100 200這個執行shell的命令行,可以將命令行參數傳遞到myshell腳本內。
變量 | 含義 |
---|---|
$n | n爲數字,$0代表當前腳本的文件名,$1-{10} |
$* | 代表命令行中所有的參數,並把所有參數看成一個整體 |
$@ | 代表命令行中所有的參數,但是把每個參數區分對待 |
$# | 代表命令行中所有參數的個數 |
預定義變量
shell設計者事先已經定義好的變量,可以直接在shell腳本中使用。
變量 | 含義 |
---|---|
$$ | 當前進程的進程號(PID) |
$! | 後臺運行的最後一個進程的進程號(PID) |
$? | 最後一次執行命令的返回狀態,如果這個變量的值爲0,則說明上一個命令執行正確,否則,上一個命令執行不正確 |
註釋
-
# 單行註釋
-
:<<! 多行註釋 !
運算符
-
語法: 1. "$((運算式))" 或 "$[運算式]" 2. expr 變量 運算符 變量(注意 expr運算符兩邊要留空格 且 乘號需要轉義 即 \*)
運算符
關係運算符(關係運算符只支持數字)
運算符 | 說明 | 舉例 |
---|---|---|
-eq(equal) | 檢測兩個數是否相等 | [ $a -eq $b] |
-ne(not equal) | 不等於(檢測兩個數是否不相等) | [ $a -ne $b ] |
-gt( greater than ) | 大於(檢測左邊的數是否大於右邊的 | )[ $a -gt $b ] |
-lt(less-than) | 小於(檢測左邊的數是否小於右邊的) | [ $a -lt $b ] |
-ge(great than or equal ) | 大於等於(檢測左邊的數是否大於等於右邊的) | [ $a -ge $b ] |
-le(less than or equal) | 小於等於(檢測左邊的數是否小於等於右邊的) | [ $a -le $b ] |
布爾運算符
運算符 | 說明 | 舉例 |
---|---|---|
! | 非運算 | [ ! false ] |
-o | 或運算 | [ $a -lt 20 -o $b -gt 100 ] |
-a | 與運算 | [ $a -lt 20 -a $b -gt 100 ] |
邏輯運算符
運算符 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] |
|| | 邏輯的 OR | [[ $a -lt 100 |
字符串運算符
運算符 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字符串是否相等 | [ $a = $b ] |
!= | 檢測兩個字符串是否不相等 | [ $a != $b ] |
-z | 檢測字符串長度是否爲0 | [ -z $a ] |
-n | 檢測字符串長度是否不爲0 | [ -n “$a” ] |
$ | 檢測字符串是否爲空 | [ $a ] |
文件測試運算符
運算符 | 說明 | 舉例 |
---|---|---|
-b file | 檢測文件是否是塊設備文件 | [ -b $file ] |
-c file | 檢測文件是否是字符設備文件 | [ -c $file ] |
-d file | 檢測文件是否是目錄 | [ -d $file ] |
-f file | 檢測文件是否是普通文件(既不是目錄,也不是設備文件) | [ -f $file ] |
-g file | 檢測文件是否設置了 SGID 位 | [ -g $file ] |
-k file | 檢測文件是否設置了粘着位(Sticky Bit) | [ -k $file ] |
-p file | 檢測文件是否是有名管道 | [ -p $file ] |
-u file | 檢測文件是否設置了 SUID 位 | [ -u $file ] |
-r file | 檢測文件是否可讀 | 。 [ -r $file ] |
-w file | 檢測文件是否可寫 | [ -w $file ] |
-x file | 檢測文件是否可執行 | [ -x $file ] |
-s file | 檢測文件是否爲空(文件大小是否大於0) | [ -s $file ] |
-e file | 檢測文件(包括目錄)是否存在 | [ -e $file ] |
流程控制
-
if [ 條件判斷式 ] then 程序 elif [ 條件判斷式 ] then 程序 else 程序 fi 注意:[ 條件判斷式 ]的中括號和條件判斷式之間必須有空格
-
case $變量名 in "值1") 如果變量的值等於值1,則執行程序1 ;; "值2") 如果變量的值等於值2,則執行程序2 ;; ... 省略其他分支 ... *) 如果變量的值都不是以上的值,則執行此程序 ;; esac
-
for 變量 in 值1 值2 值3... do 程序 done ------------------------------------------------------------------------------------------------------------ for ((初始值; 循環控制條件; 變量變化)) do 程序 done
-
while [ 條件判斷式 ] do 程序 done
函數
-
[ function ] function [()] { Aciotn; [return int;] } 可以帶function funname() 定義,也可以直接funname() 定義,不帶任何參數。
-
read讀取控制檯輸入 read(選項)(參數) 選項: -p:指定讀取值時的提示符 -t: 指定讀取值時候等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了 參數: 變量;指定讀取值的變量名