什麼是腳本:
一個可以執行文件,可以實現某種功能
人:創建用戶tom 計算機:useradd tom
規範Shell腳本的一般組成
• #! 環境聲明,聲明以下所有的代碼有誰進行翻譯
• # 註釋文本
• 可執行代碼
[root@server0 ~]# vim /root/hello.sh
#!/bin/bash
echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
[root@server0 ~]# /root/hello.sh
重定向輸出
>:只收集前面命令的正確信息
2>:只收集前面命令的錯誤信息
&>:正確與錯誤都收集
[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt
[root@server0 ~]# cat /opt/1.txt /a
[root@server0 ~]# cat /opt/1.txt /a > /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt
[root@server0 ~]# cat /opt/1.txt /a 2> /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt
[root@server0 ~]# cat /opt/1.txt /a &> /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt
爲了適應多變的需求與多變環境,所以使用變量
使用變量:會變化的量 類似於容器 以不變的名稱,存儲可以變化的值
變量名=存儲的值
降低腳本運行難度,產生交互,獲取到用戶輸入的內容
read -p '屏幕輸出信息'
1.產生交互
2.記錄用戶在鍵盤上所有的輸入
3.將用戶在鍵盤上所有的輸入,賦值給一個變量儲存
• 設置變量時的注意事項
– 若指定的變量名已存在,相當於爲此變量重新賦值
– 等號兩邊不要有空格
– 變量名只能由字母/數字/下劃線組成,區分大小寫
– 變量名不能以數字開頭,不要使用關鍵字和特殊字符
查看/引用變量
• 基本格式
– 引用變量值:$變量名
– 查看變量值:echo $變量名、echo ${變量名}
[root@server0 ~]# a=rhel
[root@server0 ~]# echo $a
[root@server0 ~]# echo $a7
[root@server0 ~]# echo ${a}7
[root@server0 ~]# a=CentOS
[root@server0 ~]# echo ${a}7
補充:
單引號 '' : 取消所有特殊字符的意義
[root@server0 ~]# echo ''
[root@server0 ~]# echo '* ? | '
-
? |
[root@server0 ~]# a=10
[root@server0 ~]# echo $a
10
[root@server0 ~]# echo '$a'
$a
[root@server0 ~]#變量的種類
環境變量: 變量名一般都大寫,用來設置用戶/系統環境
由系統定義完成,並且賦值完成常見的環境變量: USER=存放當前系統登陸的用戶名
[root@server0 ~]# echo $USER
root
[root@server0 ~]# su - dc
[dc@server0 ~]$ echo $USER
dc
[dc@server0 ~]$ exit
logout
[root@server0 ~]# su - student
[student@server0 ~]$ echo $USER
student
[student@server0 ~]$ exit
logout
[root@server0 ~]#
PATH=提供命令程序搜尋的路徑
[root@server0 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server0 ~]# vim /opt/hello.sh
echo I Love Dc
[root@server0 ~]# chmod +x /opt/hello.sh
[root@server0 ~]# /opt/hello.sh
I Love Dc
[root@server0 ~]# hello.sh
bash: hello.sh: 未找到命令...
[root@server0 /]# cp /opt/hello.sh /usr/bin/
[root@server0 /]# hello.sh
位置變量:非交互式傳遞命令行參數
• 在執行腳本時提供的命令行參數
– 表示爲 $n,n爲序號
– $1、$2、.. .. ${10}、${11}、.. ..
預定義變量
• 用來保存腳本程序的執行信息
– 直接使用這些變量
– 不能直接爲這些變量賦值
$# 已加載的位置變量的個數,專門用於判斷用戶是否輸入命令行參數
$? 程序退出後的狀態值,0表示正常,其他值異常
[root@server0 ~]# vim /root/1.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#
[root@server0 ~]# /root/1.sh haha xixi hehe lele
[root@server0 ~]# vim /root/3.sh
#!/bin/bash
echo 您一共輸入了$#個參數
[root@server0 ~]# chmod +x /root/3.sh
[root@server0 ~]# /root/3.sh
[root@server0 ~]# /root/3.sh hehe lele
條件測試及選擇
條件測試
– [ 測試表達式 ] #每一部分之間都要有空格
常用的測試選項
• 檢查文件狀態
-e:數據存在才爲真
-d:數據存在,並且必須爲目錄才爲真
-f:數據存在,並且必須爲文件才爲真
[root@server0 ~]# [ -f /etc/passwd ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ -d /etc/passwd ]
[root@server0 ~]# echo $?
1
[root@server0 ~]# [ -d /etc ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ -e /abc ]
[root@server0 ~]# echo $?
1
• 比較整數大小
-gt:大於
-ge:大於或等於
-eq:等於
-ne:不等於
-lt:小於
-le:小於或等於
[root@server0 ~]# [ 1 -eq 1 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -ge 1 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -ge 2 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -gt 2 ]
[root@server0 ~]# echo $?
1
• 字符串比對
==:兩個字符串一致爲真
!=:兩個字符串不一致爲真
[root@server0 ~]# [ student == haha ]
[root@server0 ~]# echo $?
1
[root@server0 ~]# [ root == $USER ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ student != haha ]
[root@server0 ~]# echo $?
0
[root@server0 ~]#
if選擇結構
if雙分支處理
if [條件測試];then
命令序列xx
else
命令序列yy
fi
if多分支處理
if [條件測試1];then
命令序列xx
elif [條件測試2];then
命令序列yy
elif [條件測試3];then
命令序列hh
else
命令序列zz
fi
for循環結構,解決重複性的操作
• 遍歷/列表式循環
– 根據變量的不同取值,重複執行xx處理
for 變量名 in 值列表
do
反覆執行的代碼