一、第一個script
① 編寫習慣
1)內容與功能
2)版本信息
3)作者與聯絡方式
4)建檔日期
5)歷史記錄
② hello world程序
#!/bin/bash
echo -e "Hello World!! \a \n"
exit 0
③ 運行程序
sh 程序
二、簡單實例
① 讓用戶輸入值,再輸出到屏幕
read -p “input your firstname” firstname
...
echo -e "your fullename is : ${firstname} ${lastname}"
② 利用data自動創建不同的文檔名
date1=$(date --date='2 days ago' +%Y%m%d) 前兩天的日期
③ 數值運算
表達方式1:declare -i total=${firstnu}*${secnu}
表達方式2:total=$((${firstnu}*${secnu}))
三、script的執行方式
① sh 程序 直接執行,程序會在子程序bash內執行
② source 程序 程序在父程序bash內執行
四、test指令的測試功能
① test -e 文件 && echo "存在" || echo “不存在” 判斷文件是否存在及相關屬性
($?:返回值,正確為0,錯誤為1)
-e:該文件是否存在
-f:該文件是否存在且為 文件(file)
-d:該文件是否存在且為 目錄
-r:該文件是否存在且具有 可讀 權限
-w:該文件是否存在且具有 可寫 權限
-x:該文件是否存在且具有 可執行 權限
-u:該文件是否存在且具有 SUID 屬性
-g:該文件是否存在且具有 SGID 屬性
-s:該文件是否存在且為 非空文件
② test 文件1 參數 文件2 比較兩個文件
參數有如下
-nt:(newer than)判斷文件1是否比文件2新
-ot:(older than)
-ef:判斷兩個文件是否為同一個文件,可用在判斷hardlink上,是否都指向同一個inode上。
③ test 數值1 參數 數值2 判斷兩個整數
參數有如下
-eq:相等(equal)
-ne:不等(not equal)
-gt:大於(greater than)
-lt:小於(less than)
-ge:大於等於
-le:小於等於
④ 判定字符串的數據
test -z string:判定字符串是否為空,若為空,則為true
test -n string:判定字符串是否為非空,若為空,則為false
test str1 == str2:判定兩個字符串相等,若相等,則為true
test str1 != str2: 判定兩個字符串不相等,若相等,則為false
⑤ 多重條件判定
test -r 文件 -a -x 文件
-a:and
-o:or
!:反向狀態
五、判斷符號:[ ] 跟test一樣的用法
[ "$home" == "$samll" ] 判斷兩個變量是否相同,每個組件都需要有空格鍵分隔,變量要用 雙引號 括起來
六、shell script的默認變數($0,$1...)
① script的特殊變量如下
$#:代表后接的參數 個數,返回值如 4(個)
$@:代表[ "$1" "$2" "$3" "$4" ],每個變量是獨立的
$*:代表[ "$1n$2n$3n$4" ],n為分隔符,默認空格鍵
$0:執行的腳本檔名,$1:第1個參數,$2:第2個參數
② 栗子:直接在執行命令后面帶上參數
1) sh 文件 參數1 參數2 參數3
2) 腳本內容:
echo "腳本名稱是:${0}"
echo "有幾個參數:$#"
echo "參數內容是:$@"
echo "第1個參數是:${1}"
echo "第2個參數是:${2}"
七、參數變量號碼偏移(想左移除) shift
shift [n] n是數字,可以一次移除幾個參數
八、條件判斷式
① if [ 條件判斷式 一] ; then
執行的代碼
elif [條件判斷式二] ; then
執行的代碼
else
執行的代碼
fi
九、case ...in...esac判斷語句
case $變量 in
"第一個變量內容")
執行碼
;;
"第二個變量內容")
執行碼
;;
*)
執行碼
;;
esac
十、function(函數)
function 函數名(){
執行代碼
}
十一、loop 循環
①不定循環
while [ 判斷式 ]
do
執行代碼
done
當滿足條件時循環
until [判斷式]
do
執行代碼
done
當滿足條件時終止循環
②固定循環
for 變量名 in 變量值1 變量值2 變量值3 ...
do
執行代碼
done
第一次循環時,變量名的內容為變量值1 。。。
③固定循環。 for的另一種寫法
for (( 初始值;限制值;執行步階 )) (( i=1;i<=100;i=i+1 ))
do
執行代碼
done
的
十二、shell script的追蹤與debug
sh [-nvx] scripts.sh
-n:不要執行script,僅查詢語法的問題
-v:再執行script前,先將scripts的內容輸出到屏幕上
-x:將使用到的script內容顯示到屏幕上。
十三:示例
參考資料1:https://www.cnblogs.com/luoahong/articles/8456203.html
常用shell腳本:https://www.cnblogs.com/ysgcs/p/9938832.html
十四:自己編寫的shell
1、當前用戶的角色和目錄路徑

#!/bin/bash #kentee #2020/5/5 #實現自動顯示使用者的身份和所在目錄 echo -e "您目前的身份是:$(whoami)" echo -e "您目前所在的目錄是:$(pwd)" echo -e "現在的日期是:$(date +%m%d)"
2、讓用戶輸入生日,計算出生日是否已過

ntee #2020/5/5 #讓用戶輸入自己的生日(月日),計算出用戶的生日還有幾天。 read -p "請輸入您的生日(幾月幾日,如:0722):" bir now=`date +%m%d` bir=10#${bir} now=10#${now} if((${bir}==${now}));then echo -e "今天是您的生日!祝您生日快樂!!!" elif ((${bir}<${now}));then echo -e "您的生日已經過了哦!祝您新的一年順順利利!!!" else echo -e "您的生日即將到來,好好期待下哦!!!" fi ~
十五:
1、crontab 定時任務
參考資料:https://www.cnblogs.com/ftl1012/p/crontab.html