欢迎各位兄弟 发布技术文章
这里的技术是共享的
练习: 写一个脚本,完成以下任务
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 $?
[root@ebs-22618 ~]# B=3
[root@ebs-22618 ~]# [ $A -eq $B ]
[root@ebs-22618 ~]# echo $?
[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 ~]#
[root@ebs-22618 ~]# nano second.sh
[root@ebs-22618 ~]# chmod +x second.sh
[root@ebs-22618 ~]# ./second.sh 脚本
脚本 second.sh 执行结束 $LINES 变量退出了
[root@ebs-22618 ~]# nano second.sh
#!/bin/bash
LINES=`wc -l /etc/inittab`
echo $LINES
echo `echo $LINES | cut -d' ' -f1`
[root@ebs-22618 ~]# ./second.sh
[root@ebs-22618 ~]# nano second.sh [ $FINLINES -gt 100 ] 比较的时候,相当于执行命令
[root@ebs-22618 ~]# ./second.sh
[root@ebs-22618 ~]# nano second.sh
#!/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
[root@ebs-22618 ~]# nano adduser2.sh
[root@ebs-22618 ~]# ./adduser2.sh
[root@ebs-22618 ~]# ./adduser2.sh
[root@ebs-22618 ~]# nano third.sh
[root@ebs-22618 ~]# chmod +x third.sh
[root@ebs-22618 ~]# ./third.sh
[root@ebs-22618 ~]# nano third.sh
[root@ebs-22618 ~]# ./third.sh
[root@ebs-22618 ~]# nano usertest.sh
[root@ebs-22618 ~]# chmod +x usertest.sh
[root@ebs-22618 ~]# ./usertest.sh
[root@ebs-22618 ~]# nano usertest.sh
[root@ebs-22618 ~]# ./usertest.sh
[root@ebs-22618 ~]# nano usertest.sh
#!/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.