使用vim文本編輯器,每行一條Linux命令, 按執行順序依次編寫:java
[root@localhost ~]# vim first.sh cd /boot/ //切換目錄 pwd //顯示當前所在目錄 Is -Ih vml* //查看全部「vml」開頭的文件
通常文件的權限有三種,讀(r)、寫(w)、執行(x)。一般Shell腳本寫完是不具有執行(x)權限的,因此咱們須要給予它執行權限。編程
[root@localhost ~]# chmod +x first.sh //只需用chmod +x 命令後面接Shell腳本名便可 [root@localhost ~]#
方法 一:./+腳本文件路徑(必需要執行權限才能執行,執行完畢不會改變當前所在目錄)vim
[root@localhost ~]# ./first.sh /boot -rwxr-xr-x. 1 root root 5.7M 8月 9 23:19 vmlinuz-0-rescue-41b16d21413d4ea6b21c13fddca8e20a -rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost ~]#
方法二:. +腳本文件路徑(不須要執行權限就能執行)bash
[root@localhost ~]# . first.sh /boot -rwxr-xr-x. 1 root root 5.7M 8月 9 23:19 vmlinuz-0-rescue-41b16d21413d4ea6b21c13fddca8e20a -rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost boot]#
方法三: sh +腳本文件路徑(不須要執行權限就能執行,執行完畢不會改變當前所在目錄)運維
[root@localhost ~]# sh first.sh /boot -rwxr-xr-x. 1 root root 5.7M 8月 9 23:19 vmlinuz-0-rescue-41b16d21413d4ea6b21c13fddca8e20a -rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost ~]#
方法四:source +腳本文件路徑(不須要執行權限就能執行)編輯器
[root@localhost ~]# source first.sh /boot -rwxr-xr-x. 1 root root 5.7M 8月 9 23:19 vmlinuz-0-rescue-41b16d21413d4ea6b21c13fddca8e20a -rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost boot]#
一個完善的Shell腳本,還須要有腳本聲明、註釋信息、可執行語句ide
[root@localhost ~]# vim first.sh #!/bin/bash //腳本聲明,告訴系統這個腳本須要什麼解釋器來執行,即便用哪種 Shell。 #This is first script //註釋信息,說明腳本的做用 cd /boot/ echo "當前的目錄位於:" //輸出友好提示信息 pwd echo "其中以vml開頭的文件包括:" ls -lh vml*
完善後再次執行腳本,效果以下:命令行
[root@localhost ~]# ./first.sh 當前的目錄位於: /boot 其中以vml開頭的文件包括: -rwxr-xr-x. 1 root root 5.7M 8月 9 23:19 vmlinuz-0-rescue-41b16d21413d4ea6b21c13fddca8e20a -rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost ~]#
標準輸入:從該設備接收用戶輸入的數據;3d
標準輸出:經過該設備向用戶輸出數據;code
標準錯誤:經過該設備報告執行出錯信息。
類型 | 設備文件 | 文件描述編號 | 默認設備 |
---|---|---|---|
標準輸入 | /dev/stdin | 0 | 鍵盤 |
標準輸出 | /dev/stdout | 1 | 顯示器 |
標準錯誤輸出 | /dev/stderr | 2 | 顯示器 |
簡單的重定向輸入演示:
[root@localhost opt]# cd /opt/ [root@localhost opt]# touch aaa.txt bbb.txt [root@localhost opt]# ls aaa.txt bbb.txt rh [root@localhost opt]# tar czvf test.tar.gz *.txt > status.txt //建立壓縮包,將輸出結果保存到status.txt文件 [root@localhost opt]# ls aaa.txt bbb.txt rh status.txt test.tar.gz [root@localhost opt]# cat status.txt //查看status.txt文件 aaa.txt bbb.txt [root@localhost opt]#
標準錯誤輸出演示:
[root@localhost opt]# tar jxvf test.tar.gz -C /opt/ 2>> status.txt //用錯誤的格式解壓以前建立的壓縮包,並將輸出的錯誤信息追加到status.txt文件中 [root@localhost opt]# ls aaa.txt bbb.txt rh status.txt test.tar.gz [root@localhost opt]# cat status.txt //查看status.txt文件,能夠看到追加的錯誤信息 aaa.txt bbb.txt bzip2: (stdin) is not a bzip2 file. tar: Child returned status 2 tar: Error is not recoverable: exiting now [root@localhost opt]#
其它的我就不作演示了,大同小異。
將左側的命令輸出結果,做爲右側命令的處理對象
命令格式:cmd1 | cmd2 [.. I cmdn]
[root@localhost ~]# grep "bash$" /etc/passwd root:x:0:0:root:/root:/bin/bash jiang:x:1000:1000:jiang:/home/jiang:/bin/bash [root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}' root /bin/bash jiang /bin/bash [root@localhost ~]#
爲靈活管理Linux系統提供特定參數,有兩層意思。
變量名:使用固定的名稱,由系統預設或用戶定義;
變量值:可以根據用戶設置、系統環境的變化而變化。
自定義變量:由用戶本身定義、修改和使用;
環境變量:由系統維護,用於設置工做環境;
位置變量:經過命令行給腳本程序傳遞參數;
預約義變量:Bash中內置的一類變量,不能直接修改。
變量名以英文字母或下劃線開頭,區分大小寫,首個字符不能以數字開頭。中間不能有空格,可使用下劃線,
不能使用標點符號,能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。
格式:變量名=變量值
[root@localhost ~]# Product=Python [root@localhost ~]# Version=2.7.13 [root@localhost ~]#
格式:echo $變量名
[root@localhost ~]# echo $Product Python [root@localhost ~]# echo $Product $Version Python 2.7.13 [root@localhost ~]#
雙引號:容許經過$符號引用其餘變量值;
[root@localhost ~]# echo "$Product" java [root@localhost ~]#
單引號:禁止引用其餘變量值, $視爲普通字符;
[root@localhost ~]# echo '$Product' $Product [root@localhost ~]#
反撇號:命令替換,提取命令執行後的輸出結果。
[root@localhost ~]# ls -lh `which vim` -rwxr-xr-x. 1 root root 2.2M 8月 2 2017 /usr/bin/vim [root@localhost ~]#
格式:read [-p "提示信息"] 變量名
腳本內容以下:
[root@localhost ~]# vim script.sh #!/bin/bash read -p "請輸入一個整數:" num echo "您輸入的整數是:$num"
執行結果以下:
[root@localhost ~]# chmod +x script.sh [root@localhost ~]# ./script.sh 請輸入一個整數:88 您輸入的整數是:88 [root@localhost ~]#
export命令能夠將一個變量設置爲全局變量,否則我們在當前bash環境下的變量,在別的bash環境下就失效了。
格式一:export 變量名
格式二:export 變量名=變量值
[root@localhost ~]# echo $Product //輸出變量 java [root@localhost ~]# bash //更換bash環境 [root@localhost ~]# echo $Product //輸出變量 //已經找不到這個變量,由於這個bash環境沒有該變量 [root@localhost ~]# exit //退出,回到以前的bash環境 exit [root@localhost ~]# export Product //將變量Product聲明爲全局變量 [root@localhost ~]# bash //再次切換bash環境 [root@localhost ~]# echo $Product //輸出變量 java //輸出成功 [root@localhost ~]#
格式:expr 變量1 運算符 變量2 [運算符 變量3]...
經常使用運算符
加法運算:+ 減法運算:- 乘法運算:\* //Linux系統中 「 * 」 爲通配符,因此要加 「 \ 」 符號進行轉譯 除法運算:/ 求模(取餘)運算:%
簡單的運算演示:
[root@localhost opt]# expr 11 + 22 33 [root@localhost opt]# expr 11 - 22 -11 [root@localhost opt]# expr 6 / 2 3 [root@localhost opt]# expr 6 \* 2 12 [root@localhost opt]# expr 6 % 4 2 [root@localhost opt]#
環境變量是由系統提早建立,用來設置用戶的工做環境。
系統環境變量的配置文件:/etc/profile
用戶環境變量的配置文件:~/.bash_profile
PWD、PATH、USER、SHLLE、HOME
[root@localhost opt]# echo $PWD /opt [root@localhost opt]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost opt]# echo $USER root [root@localhost opt]# echo $HOME /root [root@localhost opt]# echo $SHELL /bin/bash [root@localhost opt]#
表示爲 $n,n爲1~9之間的數字。
簡單的加法腳本以下:
[root@localhost opt]# vim site.sh #!/bin/bash #執行加法運算 echo "第一個位置變量的值:$1" echo "第二個位置變量的值:$2" sum=`expr $1 + $2` echo "求和數爲$sum"
用位置變量進行加法運算:
[root@localhost opt]# chmod +x site.sh [root@localhost opt]# ./site.sh 33 45 第一個位置變量的值:33 第二個位置變量的值:45 求和數爲78 [root@localhost opt]#
$#:命令行中位置變量的個數 $*:全部位置變量的內容 $?:上一條命令執行後返回的狀態,當返回狀態值爲0時表示執行正常,非0值表示執行異常或出錯 $0:當前執行的進程/程序名
對上面的加法腳本進行更改以下:
#!/bin/bash #執行加法運算 echo "第一個位置變量的值:$1" echo "第二個位置變量的值:$2" sum=`expr $1 + $2` echo "求和數爲$sum" echo "變量個數爲:$#" echo "全部變量內容:$*" echo "當前執行的腳本名稱:$0"
執行結果以下:
第一個位置變量的值:33 第二個位置變量的值:45 求和數爲78 變量個數爲:2 全部變量內容:33 45 當前執行的腳本名稱:./site.sh [root@localhost opt]#
執行完畢用「echo $?」命令,看是否執行正常(結果爲0,執行正常):
[root@localhost opt]# echo $? 0 [root@localhost opt]#