1、if语句解释
1.1、if分支语句
if语句
- 单分支语句
- 双分支语句
- 多分支语句
双分支语句
#格式:注意判断[]中的两个空格
#$?用于判断上一条命令执行的正确性
if [ $? -eq 0 ];then
echo xxx
else
echo xxx
fi
多分支语句
#格式:注意判断[]中的两个空格
if [ $? -eq 0 ] ;then
echo xxx
elif [ 条件1 ];then
echo xxxx
elif [ 条件2 ] ;then
指定动作
elif [ 条件三 ];then
指定动作
else
不在上面的选择当中-->就是执行这个动作
fi
1.2、编写内存使用率脚本
if语句用于判断内存使用率
要求:
- 60% 警告
- 70 % 严重警告
- 80% 发邮件 不紧急
- 90% 打电话
解题思路:
- 结合之前学过的函数:meminfo(){}
- 让用户自己选择1.2.3.4等等;
- read -p :提示用户输入自己内存的使用量
- 用户输入的值和标准做判断;–>if多分支结构;
#进入一个目录
[root@Node1 ~]# cd sh/
[root@Node1 sh]#
#编写脚本
[root@Node1 sh]# vim men.sh
#!/bin/bash
#Author By LiangGaRy
#2023年4月24日
#############################
choice(){
cat << EOF
1.80 Mail
2.70 Warning
3.60 Error
EOF
}
choice
read -p "请输入你的内存值: " mem
if [ $mem -eq 1 ];then
echo "Mail "
elif [ $mem -eq 2 ];then
echo "Warning"
elif [ $men -eq 3 ];then
echo "Error"
else
echo "没有可以提示的;请选择1-3数字"
fi
#尝试实行脚本
[root@Node1 sh]# chmod +x men.sh
[root@Node1 sh]# ./men.sh
1.80 Mail
2.70 Warning
3.60 Error
请输入你的内存值: 1
Mail
[root@Node1 sh]#
1.3、购物车脚本
这道题目其实就是作业题目;
[root@Node1 sh]# vim list.sh
#定义一个变量
list(){
cat << EOF
1.apple
2.banana
3.pear
4.orange
Please select one you like:
EOF
}
list
read num
if [ $num -eq 1 ];then
echo "this is an apple;"
elif [ $num -eq 2 ];then
echo "this is an banana;"
elif [ $num -eq 3 ];then
echo "This is pears;"
elif [ $num -eq 4 ];then
echo " This is oranges;"
else
echo "Please input a new number [1-4]"
fi
#赋予权限,直接执行
[root@Node1 sh]# chmod +x list.sh
[root@Node1 sh]# ./list.sh
1.apple
2.banana
3.pear
4.orange
Please select one you like:
1
this is an apple;
2、用户以及用户组管理
2.1、用户理解
Linux当中,它是一个多用户、多任务的操作系统;
Linux 用户也可以分权限
- 用户1:部署
- 用户2:解决复杂的问题
- 用户3:测试
权限不同,分配的任务也不同;这里就出现了用户管理的概念
2.2、用户管理
权限划分:
- zhagnsan:拥有root权限
- lisi:只有基础命令;不能使用rm命令
用户:
- 账号、密码
- Linux三种角色
- 超级用户(root):拥有系统的最高权限
- ID=0,ID为0 的用户就是超级用户;
- 区别两个都是超级用户的方法:就是查看家目录位置
- 系统用户:
- Centos6系统–>1~499
- Centos7–>1~999
- 虚拟用户不登陆系统,用于维护某个服务的运行;
- http、mysql
- 普通用户:
- UID :1000+
- 超级用户(root):拥有系统的最高权限
Linux系统:用UID 和GID来区分用户的类型的;
- Linux用户有自己独立的权限;
- 财务部:有财务部的权限,销售无法查看一些文件等等;
- Linux的用户组和用户管理就是用来规范的;
3、用户组管理命令
用户和用户组的命令也是离不开增删改查
- 增加:useradd
- 删除:userdel
- 改:chage
3.1、useradd命令
作用:创建用户命令
语法:useradd + 选项 + 用户名
选项:
- -c:加上备注文字,备注文字保存在passwd的备注栏中。
- -d:指定用户登入时的启始目录。
- -e:指定账号的有效期限,缺省表示永久有效。
- -f:指定在密码过期后多少天即关闭该账号。
- -g:指定用户所属的起始群组。
- -G:指定用户所属的附加群组。
- -m:自动建立用户的登入目录。
- -M:不要自动建立用户的登入目录。
- -r:建立系统账号。
- -s:指定用户登入后所使用的shell。
- -u:指定用户ID号。
说明:
- 创建用户;用户和用户组默认是同名的
- 也会追加到/etc/passwd的文件当中
- 自己会创建一个家目录/home/用户名
- 邮件:/var/spool/mail/harry
#创建一个普通用户
[root@Node1 ~]# useradd zhangsan
[root@Node1 ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan)
#指定用户的shell是不能登录的
[root@Node1 ~]# useradd -s /sbin/nologin mysql
#添加用户的初始组
[root@Node1 ~]# useradd -g zhangsan lala
[root@Node1 ~]# id lala
uid=1004(lala) gid=1002(zhangsan) groups=1002(zhangsan)
#直接指定用户的家目录位置
[root@Node1 ~]# useradd -d /opt/lucy lucy
#添加用户的附加组
[root@Node1 ~]# useradd -G mysql,lucy,zhangsan jerry
[root@Node1 ~]# id jerry
uid=1006(jerry) gid=1006(jerry) groups=1006(jerry),1002(zhangsan),1003(mysql),1005(lucy)
3.2、userdel命令
作用:删除用户命令
语法:userdel+选项+用户名
选项:-r:删除用户以及对应的目录
#直接删除用户-->已经删除了用户,但是用户的相关文件还是存在
[root@Node1 ~]# userdel jerry
[root@Node1 ~]# find / -name jerry
/var/spool/mail/jerry
/home/jerry
#彻底删除
[root@Node1 ~]# userdel -r lucy
[root@Node1 ~]# find / -name lucy
[root@Node1 ~]#
3.3、chage命令
作用:用于密码的实效管理,用来修改帐号和密码的有效期
语法:chage+选项
选项:
- -l:列出用户的以及密码的有效期限
- -m:修改密码的最小天数
- -M:修改密码的最大天数
- -I:密码过期后,锁定帐号的天数
- -d:指定密码最后修改的日期
- -E:有效期,0表示立即过期,-1表示永不过期
- -W:密码过期前,开始警告天数
#创建一个用户
[root@Node1 ~]# useradd jenny
[root@Node1 ~]# echo 1 | passwd --stdin jenny
#让jenny用户一登就修改密码
[root@Node1 ~]# chage -d 0 jenny
[root@Node1 ~]# ssh jenny@192.168.75.131
.......
Changing password for jenny.
(current) UNIX password:
New password:
3.4、id命令
作用:查看用户的id信息
语法:id+用户名
#查看jenny用的ID信息
[root@Node1 ~]# id jenny
uid=1005(jenny) gid=1005(jenny) groups=1005(jenny)
3.5、whoami命令
作用:查看当前用户
语法:whoami
#查看当前用户是谁
[root@Node1 ~]# who am i
root pts/0 2023-05-25 15:33 (192.168.75.1)
[root@Node1 ~]# whoami
root
3.6、w命令
作用:查看当前登陆的用户
语法:w
[root@Node1 ~]# w
15:51:15 up 35 min, 1 user, load average: 0.00, 0.01, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.75.1 15:33 3.00s 0.06s 0.00s w
3.7、users命令
作用:查看当前用户
语法:users
[root@Node1 ~]# users
root
3.8、usermod命令
作用:修改用户的账号信息
语法:usermod+选项+用户
选项
- -c<备注>: 修改用户帐号的备注文字;
- -d<登入目录>:修改用户登入时的目录;
- -e<有效期限>:修改帐号的有效期限;
- -f<缓冲天数>: 修改在密码过期后多少天即关闭该帐号;
- -g<群组>: 修改用户所属的群组;
- -G<群组>; 修改用户所属的附加群组;
- -l<帐号名称>: 修改用户帐号名称;
- -L: 锁定用户密码,使密码无效;
- -s: 修改用户登入后所使用的shell;
- -u: 修改用户ID;
- -U: 解除密码锁定。
#修改用户的shell
[root@Node1 ~]# grep jenny /etc/passwd |awk -F: '{print $1":" $7}'
jenny:/bin/bash
#修改jenny的shell为/sbin/sh
[root@Node1 ~]# usermod -s /sbin/sh jenny
[root@Node1 ~]# grep jenny /etc/passwd |awk -F: '{print $1":" $7}'
jenny:/sbin/sh
4、用户相关文件解析
4.1、/etc/passwd文件
这个文件用于记录用的信息;用户创建好了,会往这个文件添加一条信息
#查看文件的信息
[root@Node1 ~]# tail -2 /etc/passwd
docker:x:1001:1001::/home/docker:/sbin/nologin
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
#输出的信息解释如下:
zhagnsan:用户名
x:密码占位符,真正的密码存放在/etc/shadows文件中
1002:用户的UID
1002:用户的GID
::这里没有信息,其实是代表用户的描述信息
/home/zhangsan:用户的家目录路径
/bin/bash:这里指的就是用户使用的shell
4.2、/etc/shadows文件
用于存放密码相关的文件;
#查看一下文件的内容
[root@Node1 ~]# tail -2 /etc/shadow
mysql:!!:19501:0:99999:7:::
lala:!!:19501:0:99999:7:::
#解释如下:
第一列:用户名
第二列:经过md5加密的密码文件
第三列:最后一次的修改时间
第四列:最小的修改时间
第五列:密码有效期
第六列:密码更换前,提示信息
第七列:密码过期后的宽限天数
第八列:账号失效时间
第九列:保留
4.3、/etc/default/useradd文件
此文件记录创建用户的时候默认会添加信息;
#查看文件
[root@Node1 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #指定初始用户组,100为”users”用户组。
HOME=/home #指定了默认的家用户路径
INACTIVE=-1 #密码过期后是否会失效;0:表示密码过期后立刻失效;-1:表示密码永久不失效;
EXPIRE= #账号失效的日期;
SHELL=/bin/bash #默认使用的shell程序
SKEL=/etc/skel #用户家目录参考基准目录,即用户家目录下的初始数据从该目录下拷贝过去;
CREATE_MAIL_SPOOL=yes #建立用户的mailbox目录;
4.4、/etc/login.defs文件
这个文件定义了普通用户的参数;
- 比如默认的用户组id号,密码修改天数等等
#查看一下信息
[root@Node1 ~]# grep -vE "^#|^$" /etc/login.defs
MAIL_DIR /var/spool/mail #创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱
PASS_MAX_DAYS 99999 #密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数
PASS_MIN_DAYS 0 #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0
PASS_MIN_LEN 5 #指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效
PASS_WARN_AGE 7 #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天
UID_MIN 1000 #指定最小UID为1000,也就是说,添加用户时,默认UID从1000开始。
UID_MAX 60000 #指定用户最大的 UID 为 60000。
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes #指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes
UMASK 077 #用户主目录的权限默认设置为 077。
USERGROUPS_ENAB yes #指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes
ENCRYPT_METHOD SHA512 #指定用户密码采用的加密规则,默认采用 SHA512