文章目錄
- Shell編程
- Shell腳本的執行方式
- Shell的變數
- Shell的變數的介紹
- shell變數的定義
- 設定環境變數
- 位置引數變數
- 介紹
- 基本語法
- 預定義變數
- 基本介紹
- 基本語法
- 運算子
- 基本語法
- 條件判斷
- 判斷陳述句
- 常用判斷條件
- 流程控制
- if 判斷
- case陳述句
- for回圈
- while回圈
- read讀取控制臺輸入
- 基本語法
- 函式
- 函式介紹
- 系統函式
- 自定義函式
Shell編程
Shell是一個命令列解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程式的 界面系統級程式,用戶可以用Shell來啟動、掛起、停止甚至是撰寫一些程式,

Shell腳本的執行方式
腳本格式要求
-
腳本以#!/bin/bash開頭
-
腳本需要有可執行權限

腳本的常用執行方式
方式1(輸入腳本的絕對路徑或相對路徑)
1)首先要賦予helloworld.sh 腳本的+x權限
2)執行腳本


方式2(sh+腳本)
說明:不用賦予腳本+x權限,直接執行即可,

Shell的變數
Shell的變數的介紹
1)Linux Shell中的變數分為,系統變數和用戶自定義變數,
2)系統變數: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等 比如: echo $HOME 等等…
3)顯示當前shell中所有變數:set



shell變數的定義
基本語法
1)定義變數:變數=值
2)撤銷變數:unset 變數
- 宣告靜態變數:readonly變數,注意:不能unset




定義變數的規則
-
變數名稱可以由字母、數字和下劃線組成,但是不能以數字開頭,
-
等號兩側不能有空格
-
變數名稱一般習慣為大寫
將命令的回傳值賦給變數
1)A=ls -la 反引號,運行里面的命令,并把結果回傳給變數A
2)A=$(ls -la) 等價于反引號




設定環境變數
基本語法
-
export 變數名=變數值 (功能描述:將shell變數輸出為環境變數)
-
source 組態檔 (功能描述:讓修改后的配置資訊立即生效)
-
echo $變數名 (功能描述:查詢環境變數的值)
位置引數變數
介紹
當我們執行一個shell腳本時,如果希望獲取到命令列的引數資訊,就可以使用到位置引數變數 比如 : ./myshell.sh 100 200 , 這個就是一個執行shell的命令列,可以在myshell 腳本中獲取到引數資訊
基本語法
$n (功能描述:n為數字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 個 參 數 , 十 以 上 的 參 數 , 十 以 上 的 參 數 需 要 用 大 括 號 包 含 , 如 9代表第一到第九個引數,十以上的引數,十以上的參 數需要用大括號包含,如 9代表第一到第九個參數,十以上的參數,十以上的參數需要用大括號包含,如{10})
? ( 功 能 描 述 : 這 個 變 量 代 表 命 令 行 中 所 有 的 參 數 , ? ? * (功能描述:這個變數代表命令列中所有的引數,** ?(功能描述:這個變量代表命令行中所有的參數,??把所有的引數看成一個整體*)
@ ( 功 能 描 述 : 這 個 變 量 也 代 表 命 令 行 中 所 有 的 參 數 , 不 過 ? ? @(功能描述:這個變數也代表命令列中所有的引數,不過** @(功能描述:這個變量也代表命令行中所有的參數,不過??@把每個引數**區分對待)
$#(功能描述:這個變數代表命令列中所有引數的個數)


預定義變數
基本介紹
就是shell設計者事先已經定義好的變數,可以直接在shell腳本中使用
基本語法
$$ (功能描述:當前行程的行程號(PID))
$! (功能描述:后臺運行的最后一個行程的行程號(PID))
$? (功能描述:最后一次執行的命令的回傳狀態,如果這個變數的值為0,證明上一個命令正 確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正 確了,)


運算子
基本語法
-
“ ( ( 運 算 式 ) ) ” 或 “ ? ? ((運算式))”或“** ((運算式))”或“??[運算式]**”
-
expr m + n 注意expr運算子間要有空格
-
expr m - n
-
expr *, /, % 乘,除,取余


推薦這種:





條件判斷
判斷陳述句
基本語法
[ condition ](注意condition前后要有空格)
#非慷訓傳true,可使用$?驗證(0為true,>1為false)
應用實體
[ atguigu ] 回傳true
[] 回傳false
[condition] && echo OK || echo notok 條件滿足,執行后面的陳述句


常用判斷條件
- 兩個整數的比較
= 字串比較 -
lt 小于
-le 小于等于 -
eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
- 按照檔案權限進行判斷
-r 有讀的權限
-w 有寫的權限
-x 有執行的權限
3)按照檔案型別進行判斷
-f 檔案存在并且是一個常規的檔案
-e 檔案存在
-d 檔案存在并是一個目錄




流程控制
if 判斷
基本語法
if [ 條件判斷式 ];then
程式
fi
或者 if [ 條件判斷式 ]
then 程式
elif [條件判斷式]
then 程式
fi
注意事項:(1)[ 條件判斷式 ],中括號和條件判斷式之間必須有空格(2) 推薦使用第二種方式
應用實體
案例:請撰寫一個shell程式,如果輸入的引數,大于等于60,則輸出 “及格了”,如果小于 60,則輸出 “不及格”


case陳述句
基本語法
case $變數名 in
“值1”)
如果變數的值等于值1,則執行程式1
;; “值2”)
如果變數的值等于值2,則執行程式2
;;
…省略其他分支…
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac
應用實體
案例1 :當命令列引數是 1 時,輸出 “周一”, 是2 時,就輸出"周二", 其它情況輸出 “other”


for回圈
基本語法1
for 變數in 值1 值2 值3…
do
? 程式
done
? 應用實體
案例1 :列印命令列輸入的引數




基本語法2
for (( 初始值;回圈控制條件;變數變化))
do
程式
done ?
應用實體
案例1 :從1加到100的值輸出顯示 [這里可以看出$* 和 $@ 的區別]


while回圈
基本語法1
while [ 條件判斷式 ]
do
? 程式
done
應用實體
案例1 :從命令列輸入一個數n,統計從 1+…+ n 的值是多少?


read讀取控制臺輸入
基本語法
read(選項)(引數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了,,
引數
變數:指定讀取值的變數名
應用實體
案例1:讀取控制臺輸入一個num值
案例2:讀取控制臺輸入一個num值,在10秒內輸入,


函式
函式介紹
shell編程和其它編程語言一樣,有系統函式,也可以自定義函式,系統函式中, 我們這里就介紹兩個,
系統函式
basename基本語法
功能:回傳完整路徑最后/ 的部分,常用于獲取檔案名 basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令會刪掉所有的前綴包括最后一個(‘/’) 字符,然后將字串顯示出來,
選項: suffix為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉
應用實體
案例1:請回傳 /home/aaa/test.txt 的 “test.txt” 部分

dirname基本語法
功能:回傳完整路徑最后/ 的前面的部分,常用于回傳路徑部分
dirname 檔案絕對路徑 (功能描述:從給定的包含絕對路徑的檔案名中去除檔案名(非目錄的部分), 然后回傳剩下的路徑(目錄的部分))
案例1:請回傳 /home/aaa/test.txt 的 /home/aaa

自定義函式
基本語法 [ function ] funname[()]
{
? Action;
? [return int;]
}
呼叫直接寫函式名:funname [值]
? 應用實體
案例1:計算輸入兩個引數的和, getSum


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275560.html
標籤:其他
上一篇:C語言-3(學習C語言的第三天)
