Shell是一個命令行解釋器,它爲用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶能夠用Shell來啓動、掛起、中止甚至是編寫一些程序。shell
Shell仍是一個功能至關強大的編程語言,易編寫、易調試、靈活性強。Shell是解釋執行的腳本語言,在Shell中能夠調用Linux系統命令。編程
1)echo輸出內容到控制檯bash
(1)基本語法:編程語言
echo [選項] [輸出內容]函數
選項:oop
-e: 支持反斜線控制的字符轉換spa
控制字符 命令行 |
做 用調試 |
\\ 進程 |
輸出\自己 |
\a |
輸出警告音 |
\b |
退格鍵,也就是向左刪除鍵 |
\c |
取消輸出行末的換行符。和「-n」選項一致 |
\e |
ESCAPE鍵 |
\f |
換頁符 |
\n |
換行符 |
\r |
回車鍵 |
\t |
製表符,也就是Tab鍵 |
\v |
垂直製表符 |
\0nnn |
按照八進制ASCII碼錶輸出字符。其中0爲數字零,nnn是三位八進制數 |
\xhh |
按照十六進制ASCII碼錶輸出字符。其中hh是兩位十六進制數 |
(2)案例
[wyh@hadoop101 sbin]$ echo "helloworld"
helloworld
2)腳本格式
(1)腳本以 #!/bin/bash 開頭
(2)腳本必須有可執行權限
3)第一個Shell腳本
(1)需求:建立一個Shell腳本,輸出helloworld
(2)實操:
[wyh@hadoop101 datas]$ touch helloworld.sh [wyh@hadoop101 datas]$ vi helloworld.sh
在helloworld.sh中輸入以下內容 #!/bin/bash echo "helloworld" |
4)腳本的經常使用執行方式
第一種:輸入腳本的絕對路徑或相對路徑
(1)首先要賦予helloworld.sh 腳本的+x權限
[wyh@hadoop101 datas]$ chmod 777 helloworld.sh
(2)執行腳本
/root/helloWorld.sh
./helloWorld.sh
第二種:bash或sh+腳本(不用賦予腳本+x權限)
sh /root/helloWorld.sh
sh helloWorld.sh
1)Linux Shell中的變量分爲,系統變量和用戶自定義變量。
2)系統變量:$HOME、$PWD、$SHELL、$USER等等
3)顯示當前shell中全部變量:set
1)基本語法:
(1)定義變量:變量=值
(2)撤銷變量:unset 變量
(3)聲明靜態變量:readonly變量,注意:不能unset
2)變量定義規則
(1)變量名稱能夠由字母、數字和下劃線組成,可是不能以數字開頭。
(2)等號兩側不能有空格
(3)變量名稱通常習慣爲大寫
3)案例
(1)定義變量A
A=8
(2)撤銷變量A
unset A
(3)聲明靜態的變量B=2,不能unset
readonly B=2
(4)可把變量提高爲全局環境變量,可供其餘shell程序使用
export 變量名
(1)A=`ls -la` 反引號,運行裏面的命令,並把結果返回給變量A
(2)A=$(ls -la) 等價於反引號
1)基本語法:
(1)export 變量名=變量值 (功能描述:設置環境變量的值)
(2)source 配置文件 (功能描述:讓修改後的配置信息當即生效)
(3)echo $變量名 (功能描述:查詢環境變量的值)
2)案例:
(1)在/etc/profile文件中定義JAVA_HOME環境變量
export JAVA_HOME=/opt/module/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
(2)查看環境變量JAVA_HOME的值
[wyh@hadoop101 datas]$ echo $JAVA_HOME
/opt/module/jdk1.7.0_79
1)基本語法
$n (功能描述:n爲數字,$0表明命令自己,$1-$9表明第一到第九個參數,十以上的參數,十以上的參數須要用大括號包含,如${10})
$* (功能描述:這個變量表明命令行中全部的參數,$*把全部的參數當作一個總體)
$@ (功能描述:這個變量也表明命令行中全部的參數,不過$@把每一個參數區分對待)
$# (功能描述:這個變量表明命令行中全部參數的個數)
2)案例
(1)輸出輸入的的參數1,參數2,全部參數,參數個數
#!/bin/bash echo "$0 $1 $2" echo "$*" echo "$@" echo "$#" |
(2)$*與$@的區別
#!/bin/bash for i in "$*" #$*中的全部參數當作是一個總體,因此這個for循環只會循環一次 do echo "The parameters is: $i" done x=1 for y in "$@" #$@中的每一個參數都當作是獨立的,因此「$@」中有幾個參數,就會循環幾回 do echo "The parameter$x is: $y" x=$(( $x +1 )) done |
a)$*和$@都表示傳遞給函數或腳本的全部參數,不被雙引號「」包含時,都以$1 $2 …$n的形式輸出全部參數
b)當它們被雙引號「」包含時,「$*」會將全部的參數做爲一個總體,以「$1 $2 …$n」的形式輸出全部參數;「$@」會將各個參數分開,以「$1」 「$2」…」$n」的形式輸出全部參數
1)基本語法:
$? (功能描述:最後一次執行的命令的返回狀態。若是這個變量的值爲0,證實上一個命令正確執行;若是這個變量的值爲非0(具體是哪一個數,由命令本身來決定),則證實上一個命令執行不正確了。)
$$ (功能描述:當前進程的進程號(PID))
$! (功能描述:後臺運行的最後一個進程的進程號(PID))
2)案例
#!/bin/bash echo "$$" ./helloworld.sh & echo "$!" echo "$?" |
1)基本語法:
(1)「$((運算式))」或「$[運算式]」
(2)expr m + n
注意expr運算符間要有空格
(3)expr m - n
(4)expr \*, /, % 乘,除,取餘
2)案例:計算(2+3)X4的值
(1)採用$[運算式]方式
[root@hadoop101 datas]# S=$[(2+3)*4]
[root@hadoop101 datas]# echo $S
(2)expr分佈計算
S=`expr 2 + 3`
expr $S \* 4
(3)expr一步完成計算
expr `expr 2 + 3` \* 4
1)基本語法:
[ condition ](注意condition先後要有空格)
#非空返回true,可以使用$?驗證(0爲true,>1爲false)
2)案例
[wyh] 返回true
[] 返回false
[condition] && echo OK || echo notok 條件知足,執行後面的語句
1)兩個整數之間比較
= 字符串比較
-lt 小於
-le 小於等於
-eq 等於
-gt 大於
-ge 大於等於
-ne 不等於
2)按照文件權限進行判斷
-r 有讀的權限
-w 有寫的權限
-x 有執行的權限
3)按照文件類型進行判斷
-f 文件存在而且是一個常規的文件
-e 文件存在
-d 文件存在並是一個目錄
4)案例
(1)23是否大於等於22
[ 23 -ge 22 ]
(2)student.txt是否具備寫權限
[ -w student.txt ]
(3)/root/install.log目錄中的文件是否存在
[ -e /root/install.log ]
1)基本語法:
if [ 條件判斷式 ];then
程序
fi
或者
if [ 條件判斷式 ]
then
程序
fi
注意事項:(1)[ 條件判斷式 ],中括號和條件判斷式之間必須有空格
2)案例
#!/bin/bash
if [ $1 -eq "123" ] then echo "123" elif [ $1 -eq "456" ] then echo "456" fi |
1)基本語法:
case $變量名 in
"值1")
若是變量的值等於值1,則執行程序1
;;
"值2")
若是變量的值等於值2,則執行程序2
;;
…省略其餘分支…
*)
若是變量的值都不是以上的值,則執行此程序
;;
esac
2)案例
!/bin/bash
case $1 in "1") echo "1" ;;
"2") echo "2" ;; *) echo "other" ;; esac |
1)基本語法1:
for 變量 in 值1 值2 值3…
do
程序
done
2)案例:
(1)打印輸入參數
#!/bin/bash #打印數字
for i in "$*" do echo "The num is $i " done
for j in "$@" do echo "The num is $j" done |
3)基本語法2:
for (( 初始值;循環控制條件;變量變化 ))
do
程序
done
4)案例
(1)從1加到100
#!/bin/bash
s=0 for((i=0;i<=100;i++)) do s=$[$s+$i] done echo "$s" |
1)基本語法:
while [ 條件判斷式 ]
do
程序
done
2)案例
(1)從1加到100
#!/bin/bash s=0 i=1 while [ $i -le 100 ] do s=$[$s+$i] i=$[$i+1] done
echo $s |
1)基本語法:
read(選項)(參數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒)。
參數
變量:指定讀取值的變量名
2)案例
讀取控制檯輸入的名稱
#!/bin/bash
read -t 7 -p "please 7 miao input your name " NAME
echo $NAME |
1)basename基本語法
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令會刪掉全部的前綴包括最後一個(‘/’)字符,而後將字符串顯示出來。
選項:
suffix爲後綴,若是suffix被指定了,basename會將pathname或string中的suffix去掉。
2)案例
[wyh@hadoop101 opt]$ basename /opt/test.txt
test.txt
[wyh@hadoop101 opt]$ basename /opt/test.txt .txt
test
3)dirname基本語法
dirname 文件絕對路徑 (功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),而後返回剩下的路徑(目錄的部分))
4)案例
[wyh@hadoop101 opt]$ dirname /opt/test.txt
/opt
1)基本語法:
[ function ] funname[()] { Action; [return int;] }
funname |
注意:
(1)必須在調用函數地方以前,先聲明函數,shell腳本是逐行運行。不會像其它語言同樣先編譯。
(2)函數返回值,只能經過$?系統變量得到,能夠顯示加:return返回,若是不加,將以最後一條命令運行結果,做爲返回值。return後跟數值n(0-255)
2)案例
(1)計算輸入參數的和
#!/bin/bash function sum() { s=0 s=$[ $1 + $2 ] echo "$s" }
read -p "Please input the number1: " n1; read -p "Please input the number2: " n2; sum $n1 $n2; |