欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 05_03 _bash脚本编程之二 条件判断-【攻城狮论坛の免费分享】有大用

练习: 写一个脚本,完成以下任务


1,添加5个用户, user1,........user5


2,每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息 


3,每个用户添加完成后,都要显示用户某某已经成功添加

useradd user1

echo "user1" | passwd --stdin user1 &> /dev/null

echo "Add user1 successfully."



条件判断:

    如果用户不存在,

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

    否则

        显示用户已经存在,不进行添加:


#!/bin/bash

U=user101

! id $U &> /dev/null &&  useradd $U &&  echo "$U" | passwd --stdin $U &> /dev/null &&  echo "$U add successfully" || echo "$U exists"


bash中如何实现条件判断?

条件测试类型:

        整数测试

        字符测试

        文件测试:判断文件是否存在


条件测试的表达式:

    [ expression ] 中括号里面两端必须有空格,否则就有有语法错误

    [[ expression ]]

    test expression  : test命令+表达式


整数比较(一般双目比较):

    -eq : equal 测试两个整数是否相等                    相等为真,不等为假 比如  $A -eq $B

    -ne : not  equal 测试两个整数是否不等             不等为真,相等为假  比如  $A -ne $B

    -gt: great than 测试一个数是否大于另一个数,   大于为真,否则为假

    -lt: less than 测试一个数是否小于另一个数        小于为真,否则为假

     -ge: great equal 大于或等于

     -le: less equal 小于或等于


命令间的逻辑关系:

    逻辑与:其中一个为假,结果就一定为假 &&   

        第一个条件为假时,第二个条件不用再判断,最后结果已有

        第一个条件为真时,第二个条件必须判断

    逻辑或:其中一个为真,结果就一定为真 || 

        第一个条件为真时,第二个条件不用再判断,最后结果已有

        第一个条件为假时,第二个条件必须判断

感叹号! 取反 求反  否定

如果用户user6 不存在,就添加用户user6     

! id user6 && useradd user6

 id user6 || useradd user6   

变量名称:

    1,只能包含字母,数字,下划线,并且不能以数字开头,

    2,不应该跟系统中已有的环境变量重名(否则会覆盖环境变量的值)

    3,最好做到见名知义


 如果用户存在,就显示用户已存在;否则就添加此用户

id user1 && echo "user1 exists." || useradd user

 如果用户不存在,就添加此用户;否则就显示用户已存在

!id user1 && useradd user || echo "user1 exists."

如果用户不存在,就添加并给密码;否则就显示用户已存在

!id user1 && useradd user && echo "user1" |  passwd --stdin user1 || echo "user1 exists."


练习,写一个脚本,完成以下要求:

1,添加3个用户user1,user2,user3,但要先判断用户是否存在,不存在而后再添加

2,添加完成后,显示一共添加了几个用户

3,最后显示当前系统上共有多少个用户


练习,写一个脚本,完成以下要求:

给定一个用户:

    1,如果其UID为0,就显示此为管理员

    2,否则,就显示其为普通用户:


如果 UID为0; 那么

    显示为管理员

否则

    显示为普通用户

#!/bin/bash

USERNAME=root

if [ `id -u $USERNAME` -eq 0 ]; then

  echo "Admin"

else

  echo "common user."

fi


NAME=user16

USERID=`id -u $NAME`

if [ $USERID -eq 0 ]; then

    echo "Admin"

else

    echo "common user."

fi



NAME=user16

if [ `id -u $NAME` -eq 0 ]; then      (命令的执行结果)

    echo "Admin"

else

    echo "common user."

fi


if id $NAME;                (命令的执行状态返回值)



条件判断,控制结构:

单分支if语句

if 判断条件; then              (then与if 同一行分号不能少;then可以为下一行,分号可以少)(判断条件,可以是整数测试比较,也可以是某个命令的执行状态的返回值,只要是逻辑,或布尔值的返回值就行,只能为真,或者为假,在linux中,0为真,其它数值一律为假,这个0,一定是命令执行状态返回值,0表示执行成功)

    statement1

    statement2

    ...

fi                                      (fi是if的反过来)

双分支的if语句

if 判断条件; then

    statement1

    statement2

    ...

else

    statement3

    statement4

    ...

fi

   








练习,写一个脚本,完成以下任务

1,使用一个变量保存一个用户名

2,删除此变量中的用户,且一并删除其家目录

3,显示"用户删除完成"类的信息






 


[root@ebs-22618 ~]# A=3

[root@ebs-22618 ~]# B=6

[root@ebs-22618 ~]# [ $A -eq $B ]

[root@ebs-22618 ~]# echo $?

image.png

[root@ebs-22618 ~]# B=3

[root@ebs-22618 ~]# [ $A -eq $B ]

[root@ebs-22618 ~]# echo $?

image.png

[root@ebs-22618 ~]# id user1

id: user1:无此用户

[root@ebs-22618 ~]# id user1 &> /dev/null && echo "Hello,student."

[root@ebs-22618 ~]# id root &> /dev/null && echo "Hello,student."

Hello,student.

[root@ebs-22618 ~]# id student2 &> /dev/null && echo "Hello,student."

[root@ebs-22618 ~]# useradd student2

useradd:将更改写入 /etc/passwd 时失败 因为有云锁防护功能,把这个防护功能去掉就行了

[root@ebs-22618 ~]# useradd student2

[root@ebs-22618 ~]# id student2 &> /dev/null && echo "Hello,student."

Hello,student.

[root@ebs-22618 ~]#

image.png


[root@ebs-22618 ~]# nano second.sh

image.png

[root@ebs-22618 ~]# chmod +x second.sh

[root@ebs-22618 ~]# ./second.sh 脚本

image.png

image.png


脚本 second.sh 执行结束 $LINES 变量退出了

[root@ebs-22618 ~]# nano second.sh

image.png

#!/bin/bash

LINES=`wc -l /etc/inittab`

echo $LINES

echo `echo $LINES | cut -d' ' -f1`


[root@ebs-22618 ~]# ./second.sh

image.png

[root@ebs-22618 ~]# nano second.sh      [ $FINLINES -gt 100 ] 比较的时候,相当于执行命令

image.png

[root@ebs-22618 ~]# ./second.sh


[root@ebs-22618 ~]# nano second.sh

image.png


#!/bin/bash

LINES=`wc -l /etc/inittab`

#echo $LINES

[  `echo $LINES | cut -d' ' -f1` -gt 100 ] && echo "this is a big file" || echo "this is a small file"



[root@ebs-22618 ~]# ./second.sh

image.png

[root@ebs-22618 ~]# nano adduser2.sh

image.png

[root@ebs-22618 ~]# ./adduser2.sh

image.png

[root@ebs-22618 ~]# ./adduser2.sh

image.png


[root@ebs-22618 ~]# nano third.sh

image.png


[root@ebs-22618 ~]# chmod +x third.sh

[root@ebs-22618 ~]# ./third.sh

image.png

[root@ebs-22618 ~]# nano third.sh

image.png

[root@ebs-22618 ~]# ./third.sh

image.png


[root@ebs-22618 ~]# nano usertest.sh

image.png

[root@ebs-22618 ~]# chmod +x usertest.sh

[root@ebs-22618 ~]# ./usertest.sh

image.png


[root@ebs-22618 ~]# nano usertest.sh

image.png


[root@ebs-22618 ~]# ./usertest.sh

image.png


[root@ebs-22618 ~]# nano usertest.sh

image.png


#!/bin/bash

USERNAME=user109

id $USERNAME &> /dev/null

REVAL=$?

if [ $REVAL -eq 0 ]; then

  echo "$USERNAME exists."

else

  useradd $USERNAME

  echo $USERNAME | passwd --stdin $USERNAME &> /dev/null

  echo "add a user $USERNAME"

fi



[root@ebs-22618 ~]# ./usertest.sh

Add user17 finished.

[root@ebs-22618 ~]# ./usertest.sh

user17 exists.

image.png



image.png









普通分类: