Shell脚本传递参数的4种方式

# 脚本内容script.sh【使用位置参数】
#!/bin/bash
if [ $1 -gt 18 ]; then
    echo "You are an adult."
else
    echo "You are not an adult yet."
fi
# 脚本调用
./script.sh 19

# for语句
for i in 1 2 3 4 5; do
    echo $i
done

# while语句【使用了变量】
i=0
while [ $i -lt 10 ]; do
    echo $i
    i=$((i+1))
done
# 注意函数的定义和调用都是在脚本内部的
function sayHi {
    echo "Hello, $1!"
}
sayHi "Kite"
# read 命令会等待输入
echo "What's your name?"
read name
echo "Hello, $name!"
today=`date +%Y-%m-%d`
echo "Today is $today"
# 算术运算
num=$((1+2))
echo $num

# 字符串运算
if [ "$name" == "John" ]; then
    echo "Hello, John!"
fi

# 逻辑运算
if [ $age -gt 18 ] && [ $gender == "male" ]; then
    echo "You are a man."
fi

#!/bin/bash
echo "The first argument is $1"
echo "The second argument is $2"
$ ./script.sh hello world
shell提供了许多特殊变量来传递额外的信息,例如:

$0:表示脚本名称。
$#:表示传递给脚本的参数个数。
$@:表示所有传递给脚本的参数的列表。
$?:表示上一个命令的返回值。
#!/bin/bash
echo "The script name is $0"
echo "The number of arguments is $#"
echo "The arguments are $@"
echo "The return value of the last command is $?"
$ ./script.sh a b c

output

The script name is ./script.sh
The number of arguments is 3
The arguments are a b c
The return value of the last command is 0

命名参数

getopts是Bash shell自带的命令行参数处理工具,它的语法比较简
单,只支持处理单个字母选项,例如-a、-b等。getopts只能处理短选
项,也就是只能使用一个字母来表示选项,如果要处理长选项,需要
编写更多的代码。另外,getopts处理命令行参数时会把选项和参数分
别处理,不能处理连续的选项,例如-abc。

# 测试脚本
#!/bin/bash
while getopts n:a:g: opt
do 
	case "${opt}" in
		n) name=${OPTARG};;
		a) age=${OPTARG};;
		g) gender=${OPTARG};;
	esac
done
echo "NameVal: $name";
echo "AgeVal: $age";
echo "GenderVal: $gender";
./script.sh -n Kite -a 18 -g f
NameVal: Kite
AgeVal: 18
GenderVal: f

getopt是GNU工具集中的一个命令行参数处理工具,它支持更多的选项和语法,可以处理短选项和长选项,还可以处理连续的选项。getopt的语法比getopts更加复杂,需要指定一个选项字符串,包含了所有支持的选项和参数。getopt将解析后的选项和参数保存在一个数组中,需要在代码中处理这个数组。

getopt命令有以下几个参数:
-o:指定单字符选项。选项之间无需分隔符。
–long:指定长选项。长选项之间使用逗号分隔。
::选项后添加冒号说明当前选项需要参数值。
–:分割选项和参数。
“$@”:表示将所有命令行参数作为一个字符串传递给getopt命令。

options= ( g e t o p t − o n : a : g : p − − l o n g n a m e : , a g e : , g e n d e r : , p r i n t − − " (getopt -o n:a:g:p --long name:,age:,gender:,print -- " (getopton:a:g:plongname:,age:,gender:,print"@")会解析命令行选项和参数,并将转换后的选项和参数存储在变量options中。这个变量通常会传递给一个eval命令进行处理,例如

eval set – “$options”

# 测试脚本
#!/bin/bash
# 解析命令行参数
options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")
eval set -- "$options"

# 提取选项和参数
while true; do
  case $1 in 
  	-a | --age) shift; age=$1 ; shift ;;
    -n | --name) shift; name=$1 ; shift ;;
    -g | --gender) shift; gender=$1 ; shift ;;
    -p | --print) print=true; shift ;;
    --) shift ; break ;;
    *) echo "Invalid option: $1" exit 1 ;;
  esac
done

# 检查变量
if [ -z "$age" ]; then
    echo "Error: age is required"
    exit 1
fi
if [ -z "$name" ]; then
    echo "Error: name is required"
    exit 1
fi
if [ -z "$gender" ]; then
    echo "Error: gender is required"
    exit 1
fi

# 判断开关选项
if [ "$print" = true ]; then
    echo "NameVal: $name; AgeVal: $age; GenderVal: $gender";
fi

# 脚本调用(长选项)
./script.sh --name Kite --age 18 --gender f -p
NameVal: Kite; AgeVal: 18; GenderVal: f
# 脚本调用(单字符选项)
./script.sh -n Kite -a 18 -g f -p
NameVal: Kite; AgeVal: 18; GenderVal: f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值