shell脚本中的参数判断

本文介绍了一个Bash脚本,用于计算两个整数的最大公约数,并确保输入参数为整数。通过正则表达式进行参数验证,并提供详细的脚本实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看ABS这本神作。
分享一下今天学到的东西。

需求:在练习最大公约数这个脚本的时候,需要判断输入的参数一定是整数,其他情况则正常退出。
实现:用求最大公约数这个例子来实现。

代码如下:
#!/bin/bash

# gcd.sh: 求最大公约数
# date: 2011.08.10
# modified: Nigel_Zeng
# license: GPL

# ------------------------
# 参数检查
# 规范用法
ARGS=2
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` first-number second-number"
exit $E_BADARGS
fi
# ---------------------------
# 是否为整数
# =~ 表示后面要使用正则表达式
if [[ $1 =~ [0-9]+ && $2 =~ [0-9]+ ]]
then :
else
echo "This two parameters must be Interger.";exit $E_BADARGS
fi
# ---------------------------

gcd ()
{
dividend=$1
divisor=$2
remainder=1

until [ "$remainder" -eq 0 ]
do
let "remainder=$dividend % $divisor"
dividend=$divisor
divisor=$remainder
done
}

gcd $1 $2

echo; echo "GCD of $1 and $2 = $dividend"; echo

exit 0


说明:
“ =~ ”表示后面要使用正则表达式来判断,这个是重点。
if [[ $1 =~ [0-9]+ && $2 =~ [0-9]+ ]] 表示 第一个参数和第二个参数要是包含0-9的数。

感谢云惺给的帮助。

·····积少成多········fight


### 如何在Shell脚本判断参数是否为空 在Shell脚本中,可以通过条件语句结合特定的操作符来判断参数是否为空。以下是详细的实现方法和示例。 #### 使用 `-z` 测试操作符 `-z` 是一种常用的测试操作符,用于检测字符串长度是否为零。如果字符串为空,则返回真 (True),否则返回假 (False)[^1]。 例如: ```bash #!/bin/bash if [ -z "$1" ]; then echo "第一个参数为空" else echo "第一个参数为: $1" fi ``` 在这个例子中: - `[ -z "$1" ]` 表达式的含义是:如果 `$1` 的值为空,则条件成立。 - 如果用户未提供第一个参数或者该参数为空字符串 (`""`),则输出 `"第一个参数为空"`;否则输出实际传入的参数值[^1]。 --- #### 使用 `-n` 测试操作符 与 `-z` 不同的是,`-n` 用于检测字符串是否 **非空**。如果字符串长度大于零,则返回真 (True)。可以将其视为 `-z` 的反向操作[^3]。 以下是一个使用 `-n` 的示例: ```bash #!/bin/bash if [ -n "$2" ]; then echo "第二个参数为: $2" else echo "第二个参数为空" fi ``` 在此代码片段中: - 当用户提供有效的第二个参数时,程序会打印其值。 - 若未指定或提供了空字符串作为第二个参数,则提示 “第二个参数为空”。 --- #### 结合 `test` 或者方括号语法 除了直接利用 `[]` 方式外,还可以通过内置命令 `test` 实现相同功能[^2]。两者完全等价,只是书写形式略有差异: ```bash #!/bin/bash if test -z "$3"; then echo "第三个参数为空" else echo "第三个参数为: $3" fi ``` 注意,在这种情况下,`test` 后面跟具体的条件表达式即可完成相应的逻辑判断。 --- #### 综合应用多个参数检查 当需要同时验证多个输入项是否存在以及它们的内容状态时,可以嵌套多层 `if...elif...else` 构造来进行更复杂的处理流程。比如下面的例子展示了如何分别对待三个可能缺失的位置型变量 ($1,$2,$3): ```bash #!/bin/bash if [ -z "$1" ]; then param1="default_value_1" else param1=$1 fi if [ -z "$2" ]; then param2="default_value_2" else param2=$2 fi if [ -z "$3" ]; then param3="default_value_3" else param3=$3 fi echo "最终使用的参数分别是:" echo "param1=${param1}, param2=${param2}, param3=${param3}" ``` 此段脚本允许开发者定义缺省替代方案以防某些必要的字段被忽略掉而影响后续计算过程正常运转下去^。 --- ### 总结 以上介绍了几种常见的 Shell 脚本技术手段去判定函数调用期间所附带的数据单元是否有效存在与否及其具体数值情况下的应对策略。无论是单一还是多重情形下均能灵活运用这些基本构件达成预期目标效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值