一、運行.sh文件
(1)使用sh testsh執行 (2)使用bash testsh 執行 (3)使用點 執行 (4)使用source執行
./sh 文件開頭***的含義:
#!/bin/sh 以下的代碼由/bin/sh 來解釋
#!/bin/bash 以bash shell來解釋
#!/bin/csh 以csh shell來解釋
#!/usr/bin/env python 以下代碼由python來解釋
#! 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪
一種 Shell
(1)使用sh test.sh執行
使用 sh test.sh 來執行script文件,該方法標明使用 sh 這種shell來執行test.sh文件,sh已經是一種被bash替代的shell.
盡管我們在test.sh中聲明使用 #!/bin/bash 來執行我們的文件,但此時使用sh而不是bash,則#!/bin/bash 已不起作用。
(2)使用bash test.sh 執行
該方法其實與 sh test.sh 的原理一樣,只是使用了 /bin/bash 該種shell來執行我們的腳本文件。
所以,其實使用 dash test.sh' 也是可以的,只是取決於自己想使用那種shell來執行腳本,
但sh、bash、dash三者有些許差別,對於部分關鍵字如 let,bash支持,而sh和dash並不支持,對於部分關鍵字則選擇使用bash。
(3)使用點 . 執行
該種方式使用之前必須為文件添加執行的權限:
chmod +x test.sh
添加完執行權限之后,便可以使用 ./test.sh 來執行腳本,該方式與 bash test.sh 是一樣的 ,默認使用 bin/bash 來執行我們的腳本。
只有該種執行方式需要對文件添加執行權限,其他方式並不需要。
(4)使用source執行
使用source則也能夠直接執行我們的腳本:
source test.sh
區別
當我們使用 sh test.sh 、bash test.sh 、 ./test.sh 執行腳本的時候,該test.sh運行腳本都會使用一個新的shell環境來執行腳本內的命令,
也就是說,使用這3種方式時,其實script是在子進程的shell內執行,當子進程完成后,子進程內的各項變量和操作將會結束而不會傳回到父進程中。
能否理解?看下面例子:
- [root@ubuntu] # bash test.sh
- Please input your first name: yao <==輸入firstname
- Please input your last name: pentonBin <==輸入lastname
- Your full name is: yao pentonBin
- [root@ubuntu] # echo $firstname
- <==這里沒有輸出
如果使用source方法來執行腳本呢?
- [root@ubuntu] # source test.sh
- Please input your first name: yao <==輸入firstname
- Please input your last name: pentonBin <==輸入lastname
- Your full name is: yao pentonBin
- [root@ubuntu] # echo $firstname
- yao <==這里輸出firstname
也就是說,source方法執行腳本是在父進程中執行的,test.sh的各項操作都會在原本的shell內生效,
這也是為什么不注銷系統而要讓某些寫入~/.bashrc的設置生效時,需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc
@www.cppcns.com/os/linux/275965.html
二、編寫.sh文件
(1) 定義變量:變量名不加美元符號。
如:
Num=1 Var2="hello world!"
注意:變量名和等號之間不能有空格。
(2) 使用變量:使用一個定義過的變量,只要在變量名前面加美元符號即可.
如:
#!/bin/sh a="hello world!" num=2 echo "a is : $a num is : ${num}nd"
運行結果:
a is : hello world! num is : 2nd
說明:變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界,我們通常加花括號。
(3) 傳遞參數
我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式為:$n。
n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推……
值得注意的是,$0 獲取到的是腳本路徑以及腳本名,后面按順序獲取參數,
當參數超過10個時(包括10 個),需要使用${10},${11}....才能獲取到參數,
但是一般很少會超過10 個參數的情況。
建立腳本文件test.sh
#!/bin/bash echo "腳本$0" echo "第一個參數$1" echo "第二個參數$2"
調用的時候就可以:sh test.sh 2 3,輸出如下:
腳本 test.sh
第一個參數2
第二個參數3
(4) echo 命令: echo 用於字符串的輸出,常用於觀察系統變量的路徑。
顯示普通字符串:echo "learn linux"
顯示系統庫路徑:echo $PATH PATH 就是一個系統變量,與windonws 下的環境變量相同,存儲
默認庫的搜索路徑
(5) Shell 腳本文件遍歷目錄
問題:文件夾 /tmp 遍歷
#!/bin/bash for i in /tmp/* do echo "Hello, $i" done