shell脚本中的参数判断

本文介绍了如何使用bash脚本来计算两个整数的最大公约数,并通过正则表达式验证输入参数是否为整数。提供了一个实用的脚本示例,并感谢了云惺提供的帮助。

最近在看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

(写于2011-08-10 15:35:54)

shell脚本中,判断参数有多种方法,以下为你详细介绍: ### 检查参数是否为空 可以使用`-z`测试操作符来检查参数是否为空。例如,检查传递给脚本的第二个参数是否为空: ```bash if [ -z "$2" ]; then zone="public" else zone="$2" fi echo "The zone is set to: $zone" ``` 在上述代码中,`-z`操作符用于检查`$2`(脚本的第二个参数)的长度是否为零。如果为空,则将`zone`变量设置为`"public"`;否则,将`zone`设置为`$2`的值[^1]。 ### 条件判断的不同格式 - **`test`命令**:使用`test`命令加上条件表达式进行判断。例如,判断文件是否存在: ```bash test -e file if test -e file; then echo "文件存在" fi ``` - **单中括号`[ ]`**:这是一种常用的条件判断格式,两边必须有空格。例如,判断目录是否存在: ```bash [ -d /shell/dir1 ] if [ -d /shell/dir1 ]; then echo "目录存在" fi ``` - **双中括号`[[ ]]`**:功能与单中括号类似,但支持正则匹配(`=~`)。例如: ```bash str="hello" if [[ $str =~ ^h ]]; then echo "字符串以 h 开头" fi ``` ### 判断文件类型和权限 可以使用不同的参数判断文件的类型和权限: #### 判断文件类型 - `-e`:判断文件是否存在(任何类型文件)。 - `-f`:判断文件是否存在并且是一个普通文件。 - `-d`:判断文件是否存在并且是一个目录。 - `-L`:判断文件是否存在并且是一个软连接文件。 - `-b`:判断文件是否存在并且是一个块设备文件。 - `-S`:判断文件是否存在并且是一个套接字文件。 - `-c`:判断文件是否存在并且是一个字符设备文件。 - `-p`:判断文件是否存在并且是一个命名管道文件。 - `-s`:判断文件是否存在并且是一个非空文件(有内容)。 示例代码: ```bash # 判断目录是否存在,存在则输出信息,不存在则创建 if [ -d zhu ]; then echo '存在' else mkdir zhu fi # 判断文件是否非空 if [ -s free.sh ]; then echo '非空' else echo "空" fi ``` #### 判断文件权限 - `-r`:当前用户对其是否可读。 - `-w`:当前用户对其是否可写。 - `-x`:当前用户对其是否可执行。 - `-u`:是否有suid,高级权限冒险位。 - `-g`:是否sgid,高级权限强制位。 - `-k`:是否有t位,高级权限粘滞位。 示例代码: ```bash # 判断文件是否可读 if [ -r file.txt ]; then echo "文件可读" fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值