如果用户不存在

                添加用户,给密码并显示添加成功

否则

                显示已经存在,没有添加

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个用户user1user2user3先判断用户是否存在,不存在之后在添加

                添加完成后显示一共添加了几个用户,不能包括事先存在而没有添加的

                最后显示当前系统上一个有多少个用户

                #!/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”

               

                写一个脚本

                如果UID0,就显示此为管理员

                否则显示为普通用户

                #!/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

写一个脚本判断当前系统上是否有用户的默认shellbash,如果有就显示有多少个这类用户,否则就显示没有这类用户

#!/bin/bash

grep “\ /dev/null

RETVAL=$?

if [ $RETVAL –eq 0 ]; then

                USERS=`grep “\

                echo “theshells of $USERS users is bahs”

else

                echo “no suchuser”

fi

写一个脚本判断系统上是否有用户的默认shellbash,如果有就显示其中的一个用户名,否则就显示没有这类用户

#!/bin/bash

grep “\ /dev/null

RETVAL=$?

if [ $RETVAL –eq 0 ]; then

                AUSER=`grep“\

                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

写一个脚本给定一个用户判断其UIDGID是否一样,如果一样就显示此用户为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获取现在距离197011日的时间,减去最近一次修改密码的时间,得出的结果与警告时间做对比

#!/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 ]”