Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux/Unix 系統的橋樑。Shell 能夠解析用戶輸入的命令,並且執行這些命令。其中,Shell 傳參就是用戶在執行 Shell 命令時,將參數傳遞給 Shell 腳本,以便根據參數的不同,執行不同的操作。在本文中,我們將從多個方面詳細介紹 Shell 傳參。
一、Shell傳參基礎
Shell傳參是一種向Shell腳本(Shell Script)傳遞外部參數的方法, 也就是把執行Shell腳本時的參數傳遞給腳本中的變量, 以便在後續的程序執行過程中使用。
在 Shell 編程中,為了讓腳本更加靈活,我們常常需要在命令行上傳遞參數給 Shell 腳本。在 Shell 腳本中,我們可以通過$0
、$1
、$2
等參數來獲取不同位置的參數,其中 $0
表示腳本的名字,$1
表示第一個參數,以此類推。
#!/bin/sh
echo "傳遞到腳本的參數個數為:$#"
echo "傳遞到腳本的參數為:$@"
echo "腳本運行的當前進程ID為:$$"
echo "命令最後執行的後台進程ID為:$!"
echo "命令行中傳遞的參數分別是:$1 $2 $3"
當我們執行sh test.sh arg1 arg2
時,上述腳本的輸出結果如下:
傳遞到腳本的參數個數為:2
傳遞到腳本的參數為:arg1 arg2
腳本運行的當前進程ID為:465
命令最後執行的後台進程ID為:
命令行中傳遞的參數分別是:arg1 arg2
二、Shell傳參與引用
Shell 腳本中的引用是非常常見的,例如在 Bash 中使用變量時,需要對變量名進行引用。在 Shell 腳本中,參數也需要進行引用,以便在腳本中正確地解釋這些參數。在 Shell 編程中,我們通常使用 $1、$2、$3 等形式來傳遞參數,其中 $0 表示腳本的名稱。我們可以使用雙引號或者單引號來引用參數。
單引號引用:單引號會將引用中的所有字符轉義,不會對其中的任何特殊字符進行處理。
#!/bin/sh
echo '$0 和 $1:'"$0 $1"
echo '$$ 和 $!:'"$$ $!"
執行結果如下:
$0 和 $1:bash /home/user/test/test.sh
$$ 和 $!:637 0
雙引號引用:雙引號可以將參數中的特殊字符進行處理,特殊字符的值可以被其他值替換。
#!/bin/sh
echo "$0 和 $1:$0 $1"
echo "\$${0}: ${$0}"
執行結果如下:
和 :
$test:
三、Shell傳參帶空格
在 Shell 腳本中,有時候我們需要使用帶有空格的參數,為了正確地傳遞空格,我們可以使用雙引號或單引號來引用參數。
#!/bin/sh
echo "帶有雙引號的參數:""$1""""
echo '帶有單引號的參數:'"$1"'
執行結果如下:
帶有雙引號的參數:測試 參數1
帶有單引號的參數:測試 參數1
四、Shell循環
在 Shell 編程中,循環語句與其他編程語言相似,它可以用於重複執行一組命令。循環語句可分為 for 循環和 while 循環兩種,其中循環控制語句為 break 和 continue。
for 循環:使用 for 循環可以執行一個代碼塊一定次數的操作。
#!/bin/sh
for i in {1..5}
do
echo "循環次數為 $i"
done
執行結果如下:
循環次數為 1
循環次數為 2
循環次數為 3
循環次數為 4
循環次數為 5
while 循環:使用 while 循環可以執行一個代碼塊,直到指定的條件為真時才停止循環。
#!/bin/sh
num=1
while [ $num -le 5 ]
do
echo "循環次數為 $num"
num=$((num+1))
done
執行結果如下:
循環次數為 1
循環次數為 2
循環次數為 3
循環次數為 4
循環次數為 5
五、Shell 定義變量
在 Shell 編程中,變量保留了不同數據類型的值,包括整數、浮點數、字符串等。
定義一個整數類型的變量:在 Shell 編程中,我們首先聲明變量名,然後將變量賦值。
#!/bin/sh
a=51
echo "a 的值為 $a"
執行結果如下:
a 的值為 51
定義一個字符串類型的變量:在 Shell 編程中,我們可以使用引號來定義字符串,包括雙引號(“”)和單引號(”)。
#!/bin/sh
str="hello world"
echo "str 的值為 $str"
執行結果如下:
str 的值為 hello world
六、Shell傳參腳本
在 Shell 腳本中,需要傳遞參數時,我們可以使用 $1、$2、$3 等形式的參數來獲取腳本的參數值。下面是一個示例,演示如何處理 Shell 腳本傳遞的參數。
#!/bin/sh
echo "第一個參數:$1"
echo "第二個參數:$2"
echo "第三個參數:$3"
執行結果如下:
第一個參數:param1
第二個參數:param2
第三個參數:
七、Shell傳參數到sql
在 Shell 腳本中,我們可以將參數傳遞給 SQL 查詢,以便查詢結果。
#!/bin/sh
DB_NAME=test
TABLE_NAME=test_table
QUERY=$1
sqlplus -s /nolog <<EOF
connect username/password@db
use $DB_NAME;
select * from $TABLE_NAME where column1='$QUERY';
exit;
EOF
執行結果如下:
+-------+-------+
|column1|column2|
+-------+-------+
|test |1 |
|test |2 |
+-------+-------+
八、Shell傳參保留引號
在 Shell 腳本中傳遞參數時,如果參數中包含引號,我們可以使用雙引號或單引號進行引用,以保留引號的內容。
使用雙引號保留引號:
#!/bin/sh
echo "參數為:\"$1\""
執行結果如下:
參數為:'"引號內容"'
使用單引號保留引號:
#!/bin/sh
echo '參數為:'"'$1'"
執行結果如下:
參數為:'"引號內容"'
總結
在 Shell 編程中,參數傳遞是非常重要的。通過本文的介紹,相信大家對 Shell 參數傳遞有了更加深入的了解。在實際編程中,我們需要根據實際情況選擇不同的傳參方法,以實現更加靈活的編程。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/205913.html