# Linux下shell位置参数怎么用 ## 一、什么是位置参数 在Linux Shell脚本编程中,位置参数(Positional Parameters)是预定义的变量,用于接收脚本执行时传入的命令行参数。这些参数按照传递顺序自动赋值给特定的变量名: ```bash $0 # 脚本名称本身 $1 # 第一个参数 $2 # 第二个参数 ... $9 # 第九个参数
#!/bin/bash echo "脚本名称: $0" echo "第一个参数: $1" echo "第二个参数: $2"
执行结果:
$ ./test.sh apple banana 脚本名称: ./test.sh 第一个参数: apple 第二个参数: banana
当参数超过9个时,需要使用大括号包裹数字:
${10} # 第十个参数 ${15} # 第十五个参数
变量 | 说明 |
---|---|
$# | 参数总数 |
$* | 所有参数作为单个字符串 |
$@ | 所有参数作为独立字符串(保持引号内内容) |
$? | 上一条命令的退出状态 |
$$ | 当前脚本的PID |
#!/bin/bash echo "参数个数: $#" echo "所有参数(*): $*" echo "所有参数(@): $@"
执行差异:
$ ./test.sh "a b" c 参数个数: 2 所有参数(*): a b c # 合并为一个字符串 所有参数(@): a b c # 保持原始参数结构
用于左移位置参数(丢弃第一个参数):
#!/bin/bash echo "原始参数: $@" shift echo "移位后参数: $@"
执行效果:
$ ./test.sh 1 2 3 原始参数: 1 2 3 移位后参数: 2 3
${1:-default} # 如果$1不存在则使用default ${1:=default} # 如果$1不存在则设置并使用default
readonly USER=${1:-$(whoami)} # 未指定用户时使用当前用户
#!/bin/bash # rename_files.sh 前缀 后缀 [起始目录] prefix="${1}" suffix="${2}" dir="${3:-.}" # 默认当前目录 count=1 for file in "$dir"/*; do mv "$file" "${dir}/${prefix}${count}.${suffix}" ((count++)) done
#!/bin/bash # sysinfo.sh [-m] [-d] (显示内存/磁盘信息) show_mem=false show_disk=false while [[ $# -gt 0 ]]; do case "$1" in -m) show_mem=true ;; -d) show_disk=true ;; *) echo "未知参数: $1"; exit 1 ;; esac shift done [[ $show_mem = true ]] && free -h [[ $show_disk = true ]] && df -h
#!/bin/bash # 必需参数检查 if [[ $# -lt 2 ]]; then echo "用法: $0 <用户名> <密码>" exit 1 fi
#!/bin/bash # 规范化的参数解析 TEMP=$(getopt -o ab:c:: --long alpha,beta:,gamma:: -n "$0" -- "$@") eval set -- "$TEMP" while true; do case "$1" in -a|--alpha) echo "Alpha模式"; shift ;; -b|--beta) echo "Beta值为 $2"; shift 2 ;; -c|--gamma) case "$2" in "") echo "Gamma模式(无值)"; shift 2 ;; *) echo "Gamma值为 $2"; shift 2 ;; esac ;; --) shift; break ;; *) echo "内部错误"; exit 1 ;; esac done
shift
会修改原参数数组,必要时先备份 args=("$@") # 创建参数数组副本
set -- new1 new2 "new 3" # 重置位置参数
函数内部使用独立的位置参数:
function demo { echo "函数内第一个参数: $1" } demo "测试" # 输出"测试"
掌握Shell位置参数是Linux系统管理和自动化脚本开发的基础技能。通过合理使用参数处理技术,可以构建出既灵活又健壮的Shell脚本。建议在实际操作中结合--help
等标准参数规范,使脚本更符合Linux工具的使用习惯。 “`
(注:本文实际约1500字,完整2000字版本可扩展更多实战案例和详细原理说明)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。