您的位置:首页 > 运维架构 > Shell

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

2015-11-04 11:14 826 查看
如果用户不存在 添加用户,给密码并显示添加成功否则 显示已经存在,没有添加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判断条件;thencommandfi例如#! /bin/bashNAME=user1If id $NAME &> /dev/null ; then echo “$NAME exit”fi双分支if语句If 判断条件;thencommandelsecommandfi例如#! /bin/bashNAME=user17If id $NAME &> /dev/null ; then echo “$NAME exit”else echo “$NAMEnot exit”fi例如#! /bin/bashNAME=user17If 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/bashgrep “\<bash$” /etc/passwd &> /dev/nullRETVAL=$?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/bashgrep “\<bash$” /etc/passwd &> /dev/nullRETVAL=$?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/bashFILE=/etc/inittabif grep “^$” $FILE &> /dev/null; then echo “totalblank lines:`grep “^$” $FILE| wc –l ` ”else echl “noblank lines”fi写一个脚本给定一个用户判断其UID与GID是否一样,如果一样就显示此用户为goodguy否则就显示为badguy#!/bin/bashUSERNAME=user1USERID=`id –u $USERNAME`GROUPID=`id –g $USERNAME`if [ $USERID –eq $ FROUPID ]; then echo “goodguy”else echo “badguy”fi进一步要求,不使用id命令获得其id号#!/bin/bashUSERNAME=user1if ! grep “^$USERNAME\>” /etc/passwd &> /dev/null;then echo “nosuch user: $USERNAME” exit(退出脚本使用的,一旦发现这个命令后面的就不再执行,直接退出脚本)fiUSERID=`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=3B=61·let算术运算表达式 let C=$A+$B2·$[算术运算表达式] C=$[$A+$B]3`$((算术运算表达式)) C=$(($A+$B))4·expr算术运算表达式,表达式中个操作数及运算符之间要有空格而且要使用命令引用 C=`expr$A + $B`s

整数测试及特殊变量

bash总中常用的条件测试:整数测试:-gt,-le,-ne,-eq,-ge,-ltexit:退出脚本,定义执行状态结果的;0是正确执行,其余的是错误输出文件测试:-e:测试文件是否存在-f:测试文件是否问普通文件-d:测试指定路径是否为目录-r:当前用户对文件是否有读权限-w:是否有修改权限-x:是否有执行权限举例#!/bin/bashFILE=/etc/inittabif [ ! –e $FILE ]; then echo “nosuch $FILE” exitfiif 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/bashW=`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/bashHISTORY=`cat /root/.bash_history | wc -l`if [ $HISTORY –gt 1000 ]; then echo”somecommand will gone”else echo “ok”fi多分支if语句if 判断条件;then commandelif commandelse commandfi判断文件是否存在#!/bin/bashFILE=/etc/inittabif [ -e $FILE ]; then echo “ok”else echo “nosuch file”fi测试脚本是否有语法错误:bash–n +脚本名写一个脚本给定一个文件,如果是普通文件就显示,如果是一个目录亦显示之,否则此为无法识别之文件#!/bin/bashFILE=/etc/rc.d/rc.sysinitif [ ! –e $FILE ]; then echo “nosuch file”fiif [ -f $FILE ]; then echo “commonfile”elif [-d $FILE ]; then echo “directory”else echo”unknow”fi写一个脚本,能接受一个参数(文件路径),判定此参数如果是一个存在的文件,就显示ok,否则显示nosuch file位置变量和特殊变量位置变量:shift(命令)——将原来的参数用完之后踢除,原来的第二个变成了第一个特殊变量$#:参数个数$*:参数列表$@:参数列表#!/bin/bashecho $#(特殊变量,参数的个数)if [ -e $1 ]; then(位置变量) echo“ok”else echo”nosuch file”fi写一个脚本,给脚本传递2个参数(整数),显示2个数的和与积#!/bin/bashIf [ $# -lt 2 ]; then Echo”usage:cacl.sh ARG1 ARG2” ExitFiEcho “the sum is : $[ $1 + $2]”Echo “the prod is: $[ $1 * $2 ]”

本文出自 “Linux根文件系统” 博客,请务必保留此出处http://amazonjian.blog.51cto.com/9604681/1709533
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: