ENGINEER1.4shell
SHELL腳本基礎ubuntu
認識shell環境vim
bash shell的使用方式bash
交互式:ide
--人工干預,智能化程度高測試
--逐條解釋執行,效率低spa
非交互式:命令行
--須要提早設計,智能化難度大;設計
--批量執行,效率高;server
--方便在後臺及悄悄地執行;
什麼是shell腳本:提早設計可執行語句,用來完成特定任務的文件
--解釋型程序
--順序,批量執行
規範shell腳本的通常組成:
#!環境聲明
#註釋文本
可執行代碼
----------------------------------------------------------------------------------------------------------------------------------
例1:
編寫helloworld.sh問候腳本
編寫腳本代碼:
#vim /root/helloworld.sh
#!/bin/bash
echo 「hello world」
添加x執行權限
#chmod +x /root/helloworld.sh
運行腳本測試
#/root/helloworld.sh
例2:
編寫系統信息報告腳本
編寫腳本代碼:
#vim /root/1.sh
#!/bin/bash
cat /etc/redhat-release
uname -r
hostname
2.添加x執行權限
# chmod +x /root/1.sh
3.運行腳本測試:
#/root/1.sh
--------------------------------------------------------------------------------------------------------------------------------------
簡單腳本技巧
重定向輸出的應用
>:只收集正確 2>:只收集錯誤 &>:所有收集
本例要求編寫一個腳本 /root/out.sh,功能特性以下:
執行此腳本顯示 I love study !!
執行 /root/out.sh 2> err.log 應該沒有顯示,可是查看 err.log 文件的內容爲 I love study !!
步驟:
#vim /root/out.sh
#!/bin/bash
#echo "i love study!!" >&2
#chmod -x /root/out.sh
#/root/out.sh
#/root/out.sh 2>err.log
#cat err.log
----------------------------------------------------------------------------------------------------------------------------------------
變量的定義及使用
以不變的名稱存放可能變化的值
引用變量值:$變量名 以{}界定易混淆名稱
變量的種類:
根據變量的用途不一樣區分:
環境變量:變量名通常都大寫,用來設置用戶,系統環境 (PATH)
位置變量:bash內置,存儲內置腳本時提供的命令行參數 $n ,n爲序號 $1 $2 ...${10}
預約義變量:bash內置,可直接調用的特殊值,不能直接修改
$#:已加載的位置變量的個數 $*:全部位置變量的值 $?:程序退出後的狀態值,0表示正常,其餘異常
自定義變量:用戶自主設計,修改和使用
例:
要求編寫一個腳本 /root/myhead,功能特性以下:
此腳本可接收2個位置參數,可以按照下列格式執行
此腳本執行後,能顯示「你一共提供了 $# 個參數」,而後在下一行顯示「文件 $1 的前 $2 行: 」,緊跟下一行開始輸出對應文件的前幾行內容
步驟一:編寫 /root/myuseradd 添加用戶的腳本
#vim /root/myuseradd
#!/bin/bash
echo 「一共提供了$#個參數」
echo "用戶名是$1,密碼是$2 "
useradd $1
echo "$2" | passwd --stdin $1
二.添加執行權限
#chmod -x /root/myuseradd.sh
----------------------------------------------------------------------------------------------------------------------------------------------
經常使用測試選項:
文件狀態檢測 -f、-d、-e、-r、-w、-x
整數值比較 -gt、-ge、-eq、-ne、-lt、-le
字符串比較 ==、!=
取反操做 !
多分支if選擇結構:
if 條件測試操做1 then命令序列1
elif 條件測試操做2 then命令序列2
else 命令序列3
fi
例:
本例要求在虛擬機 server0 上建立 /root/foo.sh 腳本,任務目標以下:
當運行/root/foo.sh redhat,輸出爲fedora
當運行/root/foo.sh fedora,輸出爲redhat
當沒有任何參數或者參數不是 redhat 或者 fedora時,其錯誤輸出產生如下信息: /root/foo.sh redhat|fedora
1)編寫腳本代碼
[root@server0 ~]# vim /root/foo.sh
#!/bin/bash
if [ "$1" = "redhat" ]
then
echo "fedora"
elif [ "$1" = "fedora" ]
then
echo "redhat"
else
echo "/root/foo.sh redhat|fedora" >&2
fi
2)添加x執行權限
[root@server0 ~]# chmod +x /root/foo.sh
步驟二:測試foo.sh判斷腳本
1)測試提供正確參數的狀況
[root@server0 ~]# /root/foo.sh redhat fedora
[root@server0 ~]# /root/foo.sh fedora Redhat
2)測試提供非預期參數的狀況
[root@server0 ~]# /root/foo.sh ubuntu
/root/foo.sh redhat|fedora
3)測試不提供參數的狀況 [root@server0 ~]# /root/foo.sh /root/foo.sh redhat|fedora