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