如何bash脚本中如何用if判断字符串是否存在

回复 收藏
本帖最后由 18511338260 于 2016-5-28 20:32 编辑

我想判断用户rooooot如果不存在就不执行或者判断shadow里的rooooot字符串是否存在,存在才执行判断用户密码警告期限是否快过期,但是没有rooooo他用户下面代码还是执行而且报错,
代码中如果是root 是不报错的,请阿铭老师帮看下问题在哪,怎么改
#!/bin/bash

UserName=rooooot
if grep "^$UserName\>" /etc/shadow |cut -d: -f1 ; then
    s=`date +%s`
    today=$[ $s/86400 ]
    uptime=`grep $UserName /etc/shadow |cut -d: -f3`
    #usetime=$[ $today - $uptime ]
    let usertime= $today-$uptime
    passtime=`grep $UserName /etc/shadow |cut -d: -f5`
    let surtime=$passtime-$usetime
    wtime=`grep $UserName /etc/shadow |cut -d: -f6`

    if [ $surtime -gt $wtime ] ; then
        echo "ok"
    else
        echo "warning"
    fi
else
    echo "not user is $UserName"
    exit 1
fi
2016-05-28 17:39 举报
已邀请:
0

maria

赞同来自:

没看懂你标红的那一句,if后面应该是判断语句,返回结果是真或者假,你那一句也返回不了真假啊
0

18511338260

赞同来自:

本帖最后由 18511338260 于 2016-5-29 17:49 编辑

我以为只要有值if就默认是真没值就假,现在明白了,多谢,代码重写
0

18511338260

赞同来自:

#!/bin/bash

UserName=roooot
ChkUserName=`grep "^$UserName\>" /etc/shadow |cut -d: -f1`
#echo $ChkUserName
if [ -z "$ChkUserName" ] ; then
    echo "not user $UserName"
    exit 1
fi

s=`date +%s`
today=$[ $s/86400 ]
uptime=`grep $UserName /etc/shadow |cut -d: -f3`
usetime=$[ $today - $uptime ]
passtime=`grep $UserName /etc/shadow |cut -d: -f5`
let surtime=$passtime-$usetime
wtime=`grep $UserName /etc/shadow |cut -d: -f6`

    if [ $surtime -gt $wtime ] ; then
        echo "ok"
    else
        echo "warning"
    fi


回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: