设为首页 收藏本站
查看: 703|回复: 0

shell脚本编程之条件判断,算术运算,整数测试及特殊变量

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 09:51:27 | 显示全部楼层 |阅读模式
如果用户不存在
                添加用户,给密码并显示添加成功
否则
                显示已经存在,没有添加
bash中如何实现条件判断
条件判断类型
                整数测试
                -eq:两个整数是否相等
                -ne:测试俩个整数是否不等
                -gt:一个数是否大于另一个数
                -lt:一个数是否小于另一个数
                -ge:大于等于
                -le:小于等于
                字符串测试
                文件测试
条件测试的表达式test或是 [ ]
通过id+username来判断用户是否存在
命令间的逻辑关系
                逻辑与&&:第一个条件为假,后边的不用判断
                逻辑或||:第一个条件为真,后面的不用判断
例如如果/etc/inittab文件的行数大于100,就显示大文件
[ ‘wc –l /etc/inittab | cut –d ‘ ‘ –f1 ’ –gt 100 ] &&echo “big file”
变量名称只能包含字母数字下划线,数字不能开头,不应该重名,最好见名知义
如果用户存在就显示用户,否则就添加用户
id user1 && echo “user1 exit” || useradd user1
如果用户不存在就添加,否则就显示用户
! id user1 && useradd user1 || echo “user1 exit”
如果用户不存在添加用户并给密码,否则显示已经存在
! id user1 && useradd user1 && echo “user1”| passwd –stdin user1 || echo “user1 exit”
                用脚本完成
                添加3个用户user1,user2,user3先判断用户是否存在,不存在之后在添加
                添加完成后显示一共添加了几个用户,不能包括事先存在而没有添加的
                最后显示当前系统上一个有多少个用户
                #!/bin/bash
                ! iduser1 &> /dev/null && useradd user1 && echo “user1” |passwd –stdin user1 &>/dev/null || echo “user1 exit”
                ! iduser2 &> /dev/null && useradd user2 && echo “user2” |passwd –stdin user2 &>/dev/null || echo “user2 exit”
                ! iduser3 &> /dev/null && useradd user3 && echo “user3” |passwd –stdin user3 &>/dev/null || echo “user3 exit”
                USERS=`wc–l /etc/passwd | cut –d: -f1`(反引号是能引用命令的执行结果)
                echo“$USERS users”
               
                写一个脚本
                如果UID为0,就显示此为管理员
                否则显示为普通用户
                #!/bin/bash
                NAME=user1
                USERID=`id–u $NAME `
                [$USERID –eq 0 ] && echo “admin” || echo “common user”
条件判断,控制结构
单分支if语句
if判断条件;then
command
fi
例如
#! /bin/bash
NAME=user1
If id $NAME &> /dev/null ; then
                echo “$NAME exit”
fi
双分支if语句
If  判断条件;then
command
else
command
fi
例如
#! /bin/bash
NAME=user17
If id $NAME &> /dev/null ; then
                echo “$NAME exit”
else
                echo “$NAMEnot exit”
fi
例如
#! /bin/bash
NAME=user17
If id $NAME &> /dev/null ; then
                echo “$NAME exit”
else
                useradd$NAME
                echo$NAME | passwd –stdin $NAME &> /dev/null
                echo “add$NAME finished”
fi
写一个脚本判断当前系统上是否有用户的默认shell是bash,如果有就显示有多少个这类用户,否则就显示没有这类用户
#!/bin/bash
grep “\<bash$” /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL –eq 0 ]; then
                USERS=`grep “\<bash$”/etc/passwd | wc –l`
                echo “theshells of $USERS users is bahs”
else
                echo “no suchuser”
fi
写一个脚本判断系统上是否有用户的默认shell是bash,如果有就显示其中的一个用户名,否则就显示没有这类用户
#!/bin/bash
grep “\<bash$” /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL –eq 0 ]; then
                AUSER=`grep“\<bash$” /etc/passwd | head –l | cut –d: -f1`
                echo “$AUSERis one of such users”
else
                echo “nosuch user”
fi
写一个脚本给定一个文件比如/etc/inittab,判断这个文件中是否有空白行,如果有则显示空白行数,否则显示没有空白行
#!/bin/bash
FILE=/etc/inittab
if grep “^$” $FILE &> /dev/null; then
                echo “totalblank lines:`grep “^$” $FILE| wc –l ` ”
else
                echl “noblank lines”
fi
写一个脚本给定一个用户判断其UID与GID是否一样,如果一样就显示此用户为goodguy否则就显示为badguy
#!/bin/bash
USERNAME=user1
USERID=`id –u $USERNAME`
GROUPID=`id –g $USERNAME`
if [ $USERID –eq $ FROUPID ]; then
                echo “goodguy”
else
                echo “badguy”
fi
进一步要求,不使用id命令获得其id号
#!/bin/bash
USERNAME=user1
if ! grep “^$USERNAME\>” /etc/passwd &> /dev/null;then
                echo “nosuch user: $USERNAME”
                exit(退出脚本使用的,一旦发现这个命令后面的就不再执行,直接退出脚本)
fi
USERID=`grep “^$USERNAME\>” /etc/passwd | cut –d: -f3`
GROUPID=`grep “^$USERNAME\>” /etc/passwd | cut –d: -f4`
if [ $USERID –eq $ FROUPID ]; then
                echo “goodguy”
else
                echo “badguy”
fi
Shell中如何进行算术运算
A=3
B=6
1·let算术运算表达式
                let C=$A+$B
2·$[算术运算表达式]
                C=$[$A+$B]
3`$((算术运算表达式))
                C=$(($A+$B))
4·expr算术运算表达式,表达式中个操作数及运算符之间要有空格而且要使用命令引用
                C=`expr$A + $B`s
整数测试及特殊变量
bash总中常用的条件测试:
整数测试:-gt,-le,-ne,-eq,-ge,-lt
exit:退出脚本,定义执行状态结果的;0是正确执行,其余的是错误输出
文件测试:
-e:测试文件是否存在
-f:测试文件是否问普通文件
-d:测试指定路径是否为目录
-r:当前用户对文件是否有读权限
-w:是否有修改权限
-x:是否有执行权限
举例
#!/bin/bash
FILE=/etc/inittab
if [ ! –e $FILE ]; then
                echo “nosuch $FILE”
                exit
fi
if grep “^$” $FILE &> /dev/null; then
                echo “totalblank lines `grep “^$” $FILE | wc –l ` ”
else
                echo “nosuch blank line”
fi
写一个脚本给定一个用户获取其密码警告期限而后判断用户最近一次修改密码时间距今天是否已经小于警告期限
提示:算术运算的方法$[$A-$B]:表示变量A的值减去变量B的值的结果,如果小于则显示warning否则就显示ok,提示用date获取现在距离1970年1月1日的时间,减去最近一次修改密码的时间,得出的结果与警告时间做对比
#!/bin/bash
W=`grep “student” /etc/shadow | cut –d: -f6`
S=`date +%s`
T=`expr $s /86400`
L=`grep “^student” /etc/shadow | cut –d: -f5`
N=`grep “^student” /etc/shadow | cut –d: -f3`
SY=$[ $L - $[ $T -$N ] ]
if [ $SY –lt $W ]; then
                echo “warning”
else
                echo “ok”
fi
写一个脚本判定命令历史的总条目是否大于1000,如果大于就显示somecommand will gone,否则显示ok
#!/bin/bash
HISTORY=`cat /root/.bash_history | wc -l`
if [ $HISTORY –gt 1000 ]; then
                echo”somecommand will gone”
else
                echo “ok”
fi
多分支if语句
if 判断条件;then
                command
elif
                command
else
                command
fi
判断文件是否存在
#!/bin/bash
FILE=/etc/inittab
if [ -e $FILE ]; then
                echo “ok”
else
                echo “nosuch file”
fi
测试脚本是否有语法错误:bash–n +脚本名
写一个脚本
给定一个文件,如果是普通文件就显示,如果是一个目录亦显示之,否则此为无法识别之文件
#!/bin/bash
FILE=/etc/rc.d/rc.sysinit
if [ ! –e $FILE ]; then
                echo “nosuch file”
fi
if [ -f $FILE ]; then
                echo “commonfile”
elif [-d $FILE ]; then
                echo “directory”
else
                echo”unknow”
fi
写一个脚本,能接受一个参数(文件路径),判定此参数如果是一个存在的文件,就显示ok,否则显示nosuch file
位置变量和特殊变量
位置变量:shift(命令)——将原来的参数用完之后踢除,原来的第二个变成了第一个
特殊变量
$#:参数个数
$*:参数列表
$@:参数列表
#!/bin/bash
echo $#(特殊变量,参数的个数)
if [ -e $1 ]; then(位置变量)
                echo“ok”
else
                echo”nosuch file”
fi
写一个脚本,给脚本传递2个参数(整数),显示2个数的和与积
#!/bin/bash
If [ $# -lt 2 ]; then
                Echo”usage:cacl.sh ARG1 ARG2”
                Exit
Fi
Echo “the sum is : $[ $1 + $2]”
Echo “the prod is: $[ $1 * $2 ]”


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135323-1-1.html 上篇帖子: shell 的内置命令与外部命令的区别 下篇帖子: shell和Python调用企业微信服务号进行报警
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表