ubuntu --- 運行.sh文件、編寫.sh文件


 

一、運行.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內執行,當子進程完成后,子進程內的各項變量和操作將會結束而不會傳回到父進程中。

能否理解?看下面例子:

  1. [root@ubuntu] # bash test.sh
  2. Please input your first name: yao <==輸入firstname
  3. Please input your last name: pentonBin <==輸入lastname
  4.  
  5. Your full name is: yao pentonBin
  6. [root@ubuntu] # echo $firstname
  7. <==這里沒有輸出

如果使用source方法來執行腳本呢?

  1. [root@ubuntu] # source test.sh
  2. Please input your first name: yao <==輸入firstname
  3. Please input your last name: pentonBin <==輸入lastname
  4.  
  5. Your full name is: yao pentonBin
  6. [root@ubuntu] # echo $firstname
  7. 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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM