您的位置:

Shell传参讲解

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 参数传递有了更加深入的了解。在实际编程中,我们需要根据实际情况选择不同的传参方法,以实现更加灵活的编程。