首页 > 系统相关 >Shell的参数传递

Shell的参数传递

时间:2023-05-06 18:31:37浏览次数:48  
标签:脚本 --------------- Shell echo 参数传递 sh 参数 test

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

具体实例:

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

为脚本设置可执行权限,并执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

另外,还有几个特殊字符用来处理参数:

Shell的参数传递_文件名

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

含有空格的参数,只需要在参数传递的时候加双引号就可以。

#!/bin/bash 

echo "---------------with double quote ---------------"
echo "$1"
echo "$2"
echo "$3"
my_procedure() {
   echo "$1"
   echo "$2"
   echo "$3"
}
my_procedure "$@"

echo "---------------withtout double quote ---------------"
echo $1
echo $2
echo $3
my_procedure() {
   echo $1
   echo $2
   echo $3
}
my_procedure "$@"
echo "---------------withtout double quote by passing arguments---------------"
my_procedure $@

输入:

./test.sh "a b" "c d" "e f"

输出结果为:

---------------with double quote ---------------
a b
c d e
f g
a b
c d e
f g
---------------withtout double quote ---------------
a b
c d e
f g
a b
c d e
f g
---------------withtout double quote by passing arguments ---------------
a
b
c

前两部分无论在函数内外,加不加引号都一样,但是在函数传递的时候要保证加引号。

标签:脚本,---------------,Shell,echo,参数传递,sh,参数,test
From: https://blog.51cto.com/u_15641375/6251033

相关文章

  • 系统集成08-使用Shell脚本
    系统集成08-使用Shell脚本1Shell基础介绍Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口Shell将用户输入的命令并且把它们送到内核去执行,然后返回执行结果Shell是可编程的,它允许用户编写由Shell命令组成的程序查看系统默认安装的shell:cat/etc/shells1......
  • xshell登录服务器提示符显示-bash-4.2#解决方法
    xshell登录服务器提示符显示-bash-4.2#解决方法突然发现root登录的xshell的终端提示符显示的是-bash-4.2#而不是root@主机名+路径的显示方式。搞了半天也不知道为什么出现这种情况。今天终于搞定这个问题,原因是root在/root下面的几个配置文件丢失,丢失文件如下:1、.bash_pro......
  • WEB|[红明谷CTF 2021]write_shell
    源码:<?phperror_reporting(0);highlight_file(__FILE__);functioncheck($input){#过滤字符if(preg_match("/'||_|php|;|~|\\^|\\+|eval|{|}/i",$input)){//if(preg_match("/'||_|=|php/",$input)){die(......
  • shell jq处理json字符串
    1.1工具介绍自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具jq是一款命令行下处理JSON数据的工具。其可以接受标准输入,命令管道或者文件中的JSON数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将......
  • Shell脚本的变量
    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:your_name="runoob.com"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线_。不能......
  • Finalshell
    使用VMware可以得到Linux虚拟机,但是在VMware中操作Linux的命令行页面不太方便1.内容的复制、粘贴跨越VMware不方便2.文件的上传、下载跨越VMware不方便3.也就是和Linux系统的各类交互,跨越VMware不方便FinalShell的下载地址为Windows:   http://www.hostbuf.com/download......
  • Shell_1
    基础语法定义变量:  xxx=""使用变量:  echo$xxx or echo${xxx}将变量定义为只读:  xxx=""  readonlyxxx删除变量:  unsetxxx字符串:单引,双引,无引都可  单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;  单引号字串中不能出现单......
  • Bash Commands and Shell Scripts
    为了考试准备一下吧这门课对这个领域的知识教的太浅,考的却很难,必须要额外自学一点东西VariablesinShellScripts首先是ShellScripts中的变量概念:ShellScripts中的变量只有一种类型stringDefinevariableinshellscripts对于一个变量赋值语句a=xxx,xxx必须是字......
  • powershell创建软连接 通过OneDrive同步文件
    放置在OneDrive文件夹中的文件只能通过Windows系统访问,即便是此文件保存在本机硬盘中。通过创建软连接的方式,既可以保证访问兼容性,也可以享受到OneDrive同步功能。OneDrive会把软连接视为源文件。创建软连接需要管理员权限。New-Item-ItemTypeSymbolicLink-Path[链接要放置......
  • Android studio Failed to start [powershell.exe]
    无法打开本地终端解决办法:1、在file→settings→Tools→Terminal→Shellpath中把值设置为电脑系统 powershell.exe文件的全路径(如下图)  ......