Shell 判断

举报
郭亚兵的博客 发表于 2019/06/27 13:49:24 2019/06/27
【摘要】 shell脚本中的变量当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替使用条件语句时,常使用变量 if [[ condition ]]; then #statementsfi<!-- more -->引用某个命令的结果时,用变量替代 n=`wc -l 1.txt`写和用户交互的脚本时,变量也是必不可少的 read -p "lnput anumber:" n; echo $n...

shell脚本中的变量

  • 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替

  • 使用条件语句时,常使用变量

    if [[ condition ]]; then
    #statements
    fi
  • 引用某个命令的结果时,用变量替代

    n=`wc -l 1.txt`
  • 写和用户交互的脚本时,变量也是必不可少的 read -p "lnput anumber:" n; echo $n 如果没写这个n,可以直接使用 $REPLY

  • 内置变量 $0,$1,$2...  $0表示脚本本身,$1第一个参数,$2第二个...  $#表示参数个数

  • 数学运算 a=1; b=2; c=(($a+$b)) 或者 $[$a+$b]


shell中的逻辑判断

  • 格式一

    if [[ 条件 ]]; then
    语句
    fi
  • 格式二

    if [[ 条件 ]]; then
    语句
    else
    语句
    fi
  • 格式三

    if [[ ... ]]; then
    ...
    elif
    ...
    else
     ...
    fi
  • 逻辑判断表达式:

    if [[ $a -gt $b ]];
    if [[ $a -lt 5 ]];
    if [[ $b -eq 10 ]];等
    -gt(>); -lt(<); -ge(>=); -le(<=); -eq(==); -ne(!=) 注意到处都是空格
    可以使用 && || 结合多个条件
    if [[ $a -gt 5 ]]&&[[ $a -lt 10 ]]; then  逻辑并
    if [[ $b -gt 5 ]]||[[ $b -lt 3 ]]; then   逻辑或


if判断文件、目录属性

[[ -f file ]] 判断是否是普通文件、且存在
[[ -d file ]] 判断是否是目录、且存在
[[ -e file ]] 判断文件或目录是否存在
[[ -r file ]] 判断文件是否可读
[[ -w file ]] 判断文件是否可写
[[ -x file ]] 判断文件是否可执行

[ -f/-d $f ] && rm -f $f 文件/目录是否存在,存在执行删除
[ -f/-d $f ] || touch $f 文件/目录是否存在,不存在执行创建

# 注意:取反就在方括号的最前面加上 ! 就可以了


if判断的一些特殊用法

if [[ -z "$a" ]]
# 这个表示当变量a的值为空时会怎么样
if [[ -n "$a" ]]
# 表示当变量a的值不为空
if grep -q '123' 1.txt; then
# 表示如果1.txt中含有'123'的行时会怎么样
if [[ ! -e file ]]; then
# 表示文件不存在时会怎么样
if [[ $a -lt 1 ]]; then
# 当变量a小于1时会怎么样
# 注意:[]中不能使用>、<、==、!=、>=、<=这样的符号

注意:

  • []中不能使用>、<、==、!=、>=、<=这样的符号,一个 = 是赋值

  • -z 或者 -n都不能作用在文件上,只能作用在变量上

  • ! -z EQUATE -n  、! -n EQUATE -z

  • if grep -q '123' 1.txt; then 取反为:if ! grep -q '123' 1.txt; then


case判断

  • case格式

    case VARIABLE NAME in
    value1)
       COMMAND
       ;;
    value2)
          COMMAND
       ;;
    *)
          COMMAND
       ;;
    esac
    在case程序中,可以在条件中使用 | ,表示或的意思,比如
    2|3)
       COMMAND
       ;;
  • 示例

    #!/bin/bash
    read -p "Please input a number: " n
    if [[ -z "$n" ]]; then
    echo "Please input a number."
    exit 1
    if

    n1=`echo $n | sed 's/[0-9]//g'`
    if [[ ! -z $n1 ]]; then # [[ -n $1 ]]
    echo 'Please input a number.'
    exit 1
    # elfi [[ $n -lt 0 ]] || [[ $n -gt 100 ]]; then
    #  echo 'The number range is 0-100.'
    #  exit 1
    fi

    fi [[ $n -ge 0 ]] && [[ $n -lt 60 ]]; then
    tag=1
    elfi [[ $n -ge 60 ]] && [[ $n -lt 80 ]]; then
     tag=2
     elfi [[ $n -ge 80 ]] && [[ $n -lt 90 ]]; then
      tag=3
      elfi [[ $n -ge 90 ]] && [[ $n -le 100 ]]; then
       tag=4
       else
        tag=0
    fi
    case  $tag in
    1)
     echo 'not ok'
     ;;
    2)
     echo 'ok'
     ;;
    3|4)
     echo 'very ok'
     ;;
    0)
     echo 'The number range is 0-100'
     ;;
    esac
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。