首页 > 系统相关 >在Linux中,如何编写脚本处理命令行参数?

在Linux中,如何编写脚本处理命令行参数?

时间:2024-04-13 21:47:13浏览次数:18  
标签:脚本 选项 echo 参数 命令行 Linux 编写 bash

在Linux中,编写脚本处理命令行参数是编写shell脚本的基本功之一。命令行参数是用户在执行脚本时附加在命令行上的额外信息,这对于增加脚本的灵活性和复用性至关重要。以下是如何在bash shell脚本中处理命令行参数的几种常见方法:

1. 位置参数

bash提供了一系列特殊变量 $0$9 用于存储命令行参数。其中:

  • $0 是脚本本身的名称。
  • $1$2、...、$9 分别代表第一个到第九个参数。

例如,假设有一个脚本 myscript.sh,我们可以这样调用它并传递参数:

./myscript.sh arg1 arg2 arg3

在脚本内部,参数可以通过以下方式访问:

#!/bin/bash

echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
2. 数组形式访问参数

从bash 4.0开始,可以使用数组$@$*来统一处理所有参数:

#!/bin/bash

# 使用数组方式遍历所有参数
for arg in "$@"
do
  echo "Argument: $arg"
done
3. 参数数量检查

$# 变量包含了传递给脚本的参数总数:

#!/bin/bash

if [ $# -eq 0 ]; then
  echo "No arguments provided!"
elif [ $# -eq 1 ]; then
  echo "One argument provided: $1"
else
  echo "More than one argument provided:"
  for arg in "$@"; do
    echo "- $arg"
  done
fi
4. getopts命令解析参数

getopts 是一个内建命令,用于处理带有选项标志(如 -f--file)的命令行参数。它按照POSIX标准解析短选项和长选项,支持选项后跟参数。

#!/bin/bash

while getopts ":f:p:" opt; do
  case $opt in
    f)  file="$OPTARG"
        echo "Using file: $file";;
    p)  port="$OPTARG"
        echo "Using port: $port";;
    \?) echo "Invalid option -$OPTARG" >&2
        exit 1;;
  esac
done

shift $((OPTIND-1))

# 处理剩下的非选项参数
for arg in "$@"; do
  echo "Non-option argument: $arg"
done

在这个例子中,脚本接受 -f-p 两个选项,每个选项后面都可以跟着一个参数。getopts 会在循环中解析选项,shift 命令则用于将参数索引向前移动,以便处理剩余的非选项参数。

5. 特殊变量 $@$*$OPTARG
  • $@ 保持参数之间的空格,适合用于传递给其他命令。
  • $* 类似于 $@,但在双引号中会将所有参数合并成一个字符串,中间由第一个字符的 IFS(Internal Field Separator)分隔。
  • $OPTARGgetopts 循环中使用,存储当前被识别的选项参数。

综上所述,在Linux中编写处理命令行参数的脚本时,可根据实际需求选择直接使用位置参数、数组遍历、参数计数、或者利用getopts进行更复杂的选项解析。

标签:脚本,选项,echo,参数,命令行,Linux,编写,bash
From: https://www.cnblogs.com/huangjiabobk/p/18133408

相关文章

  • 【Qt】编写的qt程序,如何把依赖的dll自动拷贝到exe同级目录
    如果你的Qt程序在VisualStudio中可以正常启动但直接启动exe文件会报错,可能是因为缺少依赖的QtDLL文件导致的。为了确定缺少了哪些DLL文件,你可以尝试以下方法:使用DependencyWalker:DependencyWalker是一个工具,可以帮助你分析可执行文件的依赖关系,并找出缺失的D......
  • [gnome终端反应慢]记录一次Linux终端卡顿及其解决
    2024Apr13作为一位Ubuntu用户,坚持使用下去的动力首先其实就是这个系统极低的资源占用,但在这一天。在参加比赛的这一天,出现了意外。事情发生在我对系统进行更新之后,我突然发现终端变得非常卡顿,无论是输入字符,还是打开vim编辑代码,每次按下键盘,都需要接近1s的时间才能有响应,甚至v......
  • Linux下使用docker部署mysql(一)
    1.拉取dockerdockerpullmysql:5.7 2.配置挂载目录sudomkdir-p/docker_data/mysql/datasudomkdir-p/docker_data/mysql/confsudomkdir-p/docker_data/mysql/conf/conf.dsudomkdir-p/docker_data/mysql/conf/mysql.conf.dsudomkdir-p/docker_data/mysql/logs......
  • 10、操作系统安全加固-Linux加固
    1.账号管理与认证授权1.1.为不同的管理员分配不同的账号目的:根据不同用途设置不同账户账号,提高安全层级实施方法:1.设置高风险文件为最小权限,如:passwd、shadow、group、securetty、services、grub.conf等2.使用sudo命令设置命令执行权限和禁止敏感操作权限3.检查其他权限过......
  • 斯坦福大学新突破:自动化编写维基百科式长篇文章,STORM系统掀起写作革命
    斯坦福大学新突破:自动化编写维基百科式长篇文章,STORM系统掀起写作革命在数字化时代,信息爆炸式增长,如何高效、准确地整合知识并呈现为具有深度和广度的文章,成为了学术界和业界共同面临的难题。近日,斯坦福大学的研究人员为我们带来了一个令人振奋的解决方案——STORM系统。该系统旨......
  • Linux无管理员权限,使用conda安装jupyter的R语言环境
    解决了2天,坑点满满,哭死......
  • linux 常用命令有哪些
    linux常用命令有哪些 写回答关注问题点赞收藏分享发现错别字举报回答1浏览3891 帅末2linux常用命令有:pwd命令使用pwd命令找出您所在的当前工作目录(文件夹)的路径。该命令将返回一个绝对(完整)路径,该路径基本上是所有以/开头的目录的路径。绝对路......
  • [Kyana]将Linux作为主力系统使用经验
    00|前面的话起因Win11吃藕和负优化,Win10又不支持新CPU(比如大小核调度),所以看看Linux发行版中,有没有可以基本满足日常开发使用的操作系统和相应软件。尝试Linux还有一个原因是想看看传闻中的“老机换新颜”有多厉害,所以同时又装了一个Win1022H2作为对比。配置裸机是一台18年的......
  • linux环境安装——mysql集群安装复习——主从复制
    1、首先安装mysql: mkdir-p/soft/mysql8mkdir-p/evir/mysql8执行上传文件操作rpm-qa|grepmariadb查询是否有这个文件rpm-e--nodepsmariadb-libs进行删除rpm-qa|grepmariadb查询这个文件是否删干净tar-xf/soft/my......
  • Linux架构29 ansible playbook任务标签, 复用文件, 忽略错误, 错误处理
    四、playbook任务标签1.标签的作用默认情况下,Ansible在执行一个playbook时,会执行playbook中定义的所有任务,Ansible的标签(tag)功能可以给单独任务甚至整个playbook打上标签,然后利用这些标签来指定要运行playbook中的个别任务,或不执行指定的任务。2.打标签的方式1.对一个tas......