美文网首页Linux生物信息学与算法Linux学习之路
【Shell笔记>方案】检查和判断变量非空

【Shell笔记>方案】检查和判断变量非空

作者: 王诗翔 | 来源:发表于2018-07-28 23:21 被阅读7次

自己写Shell脚本时,时常需要处理的一个操作是,如果用户没有提高输入参数,我们该如何判断输入非空和设定默认值呢?这就要依赖我之前写过的条件判断命令和字符串判断选项-n-z了。

用一个实际例子,我写过一个命令集(其实就是几个脚本)【sync deploy】利用ssh将本地命令在远程执行,而不需要显式地进行远程登录、处理、退回等一系列操作。以其中一个脚本sync-run作为解释:

#!/bin/bash
# run work task script on remote server

while getopts :f:ht opt
do case "$opt" in
    f) fl=$OPTARG ;;
    h)  echo
        echo "Usage: sync-run -f work_script -t"
        echo "==> work_script: script used to run on remote, must be a shell script contains qsub_header."
        echo "==>              You can use relative/absolute file path on server file system."
        echo "==> if -t option specified, the command will run as batch mode, it usually called by sync-deploy command."
        echo "==>"
        echo "==> examples:"
        echo "              sync-run -f work.sh      # this is regular mode, basically you wanna this if you run this script independently"
        echo "         or"
        echo "              sync-run -n work.sh -t   # this is batch mode, basically used to be called by sync-deploy command"
        echo "                                       # it will additionally generate a job_id file in the same directory as work_script"
        echo
        exit ;;
    t)  batch="y" ;;
    *) echo "Unknown option: $opt"
        echo
        sync-run -h
        exit ;;
    esac
done

# Get setting info
#source "$(pwd)/syn-setting"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "$DIR/syn-setting"

# if variable port is not set, set 22 as default
if [ ! -n "$port" ]; then
    port=22
fi

if [ ! -n "$batch" ]; then
    batch="n"
fi
# you can also use absolute path
if [ $batch == "y" ]; then
    echo "==> run as batch mode......."
    ssh -p $port $remote_user@$remote_ip "qsub $fl >> $(dirname $fl)/job_id; echo 'job id is'; cat $(dirname $fl)/job_id; rm $(dirname $fl)/job_id"
else
    echo "==> run as regular mode......."
    ssh -p $port $remote_user@$remote_ip "qsub $fl"
fi

这里不需要关注脚本细节,只需要查看整体结构,分以下几个部分:

  • 构建命令选项
  • 根据命令选项参数构建命令需要使用的参数,如果有输入提供,则使用输入,否则使用默认值
  • 根据参数运行命令

其中第二个部分是这篇文章关注点,其中代码

# if variable port is not set, set 22 as default
if [ ! -n "$port" ]; then
    port=22
fi

提供了一个范例:如果用户输入没有指定端口,则使用默认端口22。这里使用了

if [ ! -n "$port" ] 

来检查是否用户输入了端口参数,其实就是判断下$port存储的字符串是否非空。因此这部分的实质就是个字符串检测与判断的问题。

-n选项检查字符串是否非空,那么加个!即可表示无输入。另一个选项-z可以直接判断字符串是否空,更简便些。

下面代码即为证明:

[root@linuxprobe Desktop]# [ -z $fds ]
[root@linuxprobe Desktop]# echo $?
0
[root@linuxprobe Desktop]# [ ! -n $fds ] 
[root@linuxprobe Desktop]# echo $?
1

相关文章

  • 【Shell笔记>方案】检查和判断变量非空

    自己写Shell脚本时,时常需要处理的一个操作是,如果用户没有提高输入参数,我们该如何判断输入非空和设定默认值呢?...

  • Shell脚本中判断输入变量或者参数是否为空的方法

    Shell脚本中判断输入变量或者参数是否为空的方法 这篇文章主要介绍了Shell脚本中判断输入变量或者参数是否为空...

  • SHELL 笔记

    shell笔记 判断语句 运算 选择语句 循环语句 将shell字句执行结果复制给变量 shell简单传参 编号变...

  • Shell常用命令(md格式方便阅读和复制粘贴)

    Shell Shell中的变量 系统变量 自定义变量 自定义变量规则 Shell特殊变量 运算符 条件判断 基本语...

  • 目录

    shell 一、 初识shell二、 shell变量三、 正则表达式四、 认识脚本和shell判断表达式五、she...

  • Django中的{%if%} 怎么用?

    {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统...

  • Django中的{%if%} 怎么用?

    {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统...

  • 命令和SHELL在线查看的一些网页

    声明:所有文章只作为学习笔记用,转载非原创 shell 在线语法检查 https://www.shellcheck...

  • PHP面试题61-80

    变量如何定义?如何检查变量是否定义?如何删除一个变量?判断一个变量是否为空的函数?isset()unset()em...

  • shell笔记

    shell笔记 变量定义 获取系统命令结果 数学预算 返回代码 脚本参数 脚本返回代码 函数 逻辑判断 选择结构 ...

网友评论

    本文标题:【Shell笔记>方案】检查和判断变量非空

    本文链接:https://www.haomeiwen.com/subject/ljbamftx.html