Linux Day22:条件判断+if+case
2018-11-15 本文已影响1人
泥人吴
命令的间的逻辑关系:
- 逻辑与:&& (前面第一个条件为假时,第二个条件不再判断,最终结果已经显现;第一个条件为真,第二个条件必须判断)
root@VM-0-3-ubuntu:~# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1)
root@VM-0-3-ubuntu:~# id user1 &> /dev/null && echo "Hello,student"
Hello,student
root@VM-0-3-ubuntu:~# id student2 &> /dev/null && echo "Hello,student"
root@VM-0-3-ubuntu:~# useradd student2
root@VM-0-3-ubuntu:~# id student2 &> /dev/null && echo "Hello,student"
Hello,student
-
逻辑或:| |
-
如果用户不存在user6,就添加用户user6
! id user6 && useradd user6
id user6 | | useradd user6
root@VM-0-3-ubuntu:~# id user6
id: ‘user6’: no such user
root@VM-0-3-ubuntu:~# id user6 || useradd user6
uid=1008(user6) gid=1008(user6) groups=1008(user6)
后续学习:if ;then;else
if:
- 单分支的if语句:
if 判断条件;then
statement1
statement2
...
fi
- 双分支的if语句:
if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi
# 判断user1是否存在并显示出来:
root@VM-0-3-ubuntu:/home/ubuntu# nano sh03.sh
root@VM-0-3-ubuntu:/home/ubuntu# chmod +x sh03.sh
root@VM-0-3-ubuntu:/home/ubuntu# ./sh03.sh
user1 exist.
root@VM-0-3-ubuntu:/home/ubuntu# cat sh03.sh
#! /bin/bash
#
NAME=user1
if id $NAME &> /dev/null;then
echo "$NAME exist."
else
echo "$NAME not exist."
fi
# 用户不存在时,则添加一个
root@VM-0-3-ubuntu:/home/ubuntu# ./sh03.sh
add user5 finished.
root@VM-0-3-ubuntu:/home/ubuntu# cat sh03.sh
#! /bin/bash
#
NAME=user5
if id $NAME &> /dev/null;then
echo "$NAME exist."
else
useradd $NAME
echo $NAME | passwd --stdin $NAME &> /dev/null
echo "add $NAME finished."
fi
root@VM-0-3-ubuntu:/home/ubuntu# ./sh03.sh
user5 exist.
# 理解&>的意思,那么将其删除看看有什么效果。
root@VM-0-3-ubuntu:/home/ubuntu# nano sh03.sh
root@VM-0-3-ubuntu:/home/ubuntu# cat sh03.sh
#! /bin/bash
#
NAME=user5
if id $NAME ;then
echo "$NAME exist."
else
useradd $NAME
echo $NAME | passwd --stdin $NAME &> /dev/null
echo "add $NAME finished."
fi
root@VM-0-3-ubuntu:/home/ubuntu# ./sh03.sh
uid=1011(user5) gid=1011(user5) groups=1011(user5)
user5 exist.
root@VM-0-3-ubuntu:/home/ubuntu# nano sh03.sh
- 多分支 if 的语句:
if 判断条件1;then
statement1
...
elif 判断条件2;then
...
elif 判断条件3;then
...
fi
一个小练习:if+for
root@VM-0-3-ubuntu:/home/ubuntu# ./sh06.sh
user1 exsits
user2 exsits
user3 exsits
Add user4 access
user5 exsits
user6 exsits
Add user7 access
Add user8 access
Add user9 access
user10 exsits
root@VM-0-3-ubuntu:/home/ubuntu# cat sh06.sh
# !/bin/bash
#
for I in {1..10};do
if id user$I &> /dev/null;then
echo "user$I exsits"
else
useradd user$I
echo user$I | passwd --stdin user$I &> /dev/null
echo "Add user$I access"
fi
done
提前结束进程exit
- exit # 如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码。
测试脚本是否有语法错误
- bash -n 脚本
- bash -x 脚本:单步执行。
case
- case 语句:选择结构
case SWITH in
value1)
statement
...
;;
value2)
statement
...
;;
*)
statement
...
;;
esac
- 练习:
ubuntu@VM-0-3-ubuntu:~$ vim case.sh
ubuntu@VM-0-3-ubuntu:~$ cat case.sh
#/bin/bash
#
case $1 in
[0-9])
echo "A digit" ;;
[a-z])
echo "Lower" ;;
[A-Z])
echo "Upper" ;;
*)
echo "special character" ;;
esac
ubuntu@VM-0-3-ubuntu:~$ bash -n case.sh
ubuntu@VM-0-3-ubuntu:~$ chmod +x case.sh
ubuntu@VM-0-3-ubuntu:~$ ./case.sh 9
A digit
ubuntu@VM-0-3-ubuntu:~$ ./case.sh a
Lower
ubuntu@VM-0-3-ubuntu:~$ ./case.sh A
Lower
ubuntu@VM-0-3-ubuntu:~$ ./case.sh !
special character
ubuntu@VM-0-3-ubuntu:~$ ./case.sh B
Lower
# 想想为什么此处的A/B都显示为lower?
# 如果换成if该如何写?
# 添加用户tom
ubuntu@VM-0-3-ubuntu:~$ id tom
id: ‘tom’: no such user
ubuntu@VM-0-3-ubuntu:~$ ./adduser.sh -v
adduser tom finished
ubuntu@VM-0-3-ubuntu:~$ cat adduser.sh
#!/bin/bash
#
DEBUG=0
case $1 in
-v|--verbose)
DEBUG=1 ;;
esac
useradd tom &>/dev/null
[ $DEBUG -eq 1 ] && echo "adduser tom finished"
生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!
请猛戳下面链接:
B站链接:https://m.bilibili.com/space/338686099
YouTube链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists
生信工程师入门最佳指南:https://mp.weixin.qq.com/s/vaX4ttaLIa19MefD86WfUA