简介
主要学习第四章节shell脚本流程控制语句中的while条件循环语句和case条件测试语句的应用以及计划任务服务程序;第五章章节中文件所有者、所属组以及其他人对文件进行的读(r)、写(w)、执行(x)等操作及如何在linux系统中添加、删除、修改用户账号信息。
内容详情可参考:https://www.linuxprobe.com/chapter-04.html
https://www.linuxprobe.com/chapter-05.html
命令行详解可参考:https://www.linuxcool.com
while条件循环语句
while条件循环语句循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标、有范围的使用场景。
while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环。
$RANDOM变量来调取出一个随机的数值(范围为0~32767)
expr 命令取得表达式的结果
exit 0 命令终止脚本的执行
let TIMES++ 命令会让TIMES变量内的数值加1
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
case条件测试语句
case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。
case语句的语法结构如图所示:
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
计划任务服务程序
计划任务分为一次性计划任务与长期性计划任务。
比如一次性计划任务:每晚11点30重启服务器
at命令实现一次性计划任务,格式为“at 时间”
“at -l”命令查看已设置好但还未执行的一次性计划任务
“atrm 任务序号”删除已设置好但还未执行的一次性计划任务
在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。
at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015
echo "systemctl restart httpd" | at 23:30
at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root
atrm 3
at -l
4 Mon Apr 27 23:30:00 2016 a root
长期性计划任务:每周一的凌晨1点打包备份用户家目录为backup.tar.gz等等
服务名称:crond
服务工具:crontab
“分、时、日、月、星期 命令”
此处命令需要使用绝对路径,可使用whereis命令查看命令的绝对路径
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
“crontab -e” 创建、编辑计划任务的命令
“crontab -l” 查看当前计划任务的命令
“crontab -r” 删除某条计划任务的命令
管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。
crond服务设置任务的参数格式顺序:“分、时、日、月、星期 命令”
需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位,
使用crond设置任务的参数格式
字段 说明
分钟 取值为0~59的整数
小时 取值为0~23的任意整数
日期 取值为1~31的任意整数
月份 取值为1~12的任意整数
星期 取值为0~7的任意整数,其中0与7均为星期日
命令 要执行的命令或程序脚本
逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)
除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
crontab -e
crontab: installing new crontab
crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
用户身份和能力
管理员 root 0
系统用户 RHEL5/6 1~499
RHEL7 1~999
普通用户 RHEL5/6 65535
RHEL7 ~
用户组:通过使用用户组号码(GID,Group IDentification)把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。
如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。
一个用户只有一个基本用户组,但是可以有多个扩展用户组。
添加、删除、修改用户账户信息
useradd命令–用于创建新的用户
格式为“useradd [选项] 用户名”
使用该命令创建用户账户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。
useradd命令中的用户参数以及作用:
参数 作用
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为YYYY-MM-DD.
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell解释器
一旦用户的解释器被设置为/sbin/nologin,则代表该用户不能登录到系统中.
如需变更为可登陆到系统,可使用usermod -s /bin/bash linuxprobe
useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
groupadd–用于创建用户组
格式为“groupadd [选项] 群组名”
groupadd ronny
usermod----用于修改用户的属性
格式为“usermod [选项] 用户名”
修改用户属性两种方式:
1、用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目
2、用usermod命令修改已经创建的用户信息,诸如用户的UID、基本/扩展用户组、默认终端等
usermod命令中的参数及作用:
参数 作用
-c 填写用户账户的备注信息
-d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e 账户的到期时间,格式为YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的UID
passwd命令用于修改用户密码、过期时间、认证信息等
格式为“passwd [选项] [用户名]”。
passwd命令中的参数以及作用
参数 作用
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
–stdin 允许通过标准输入修改用户密码,如echo “NewPassWord” | passwd --stdin Username
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
userdel命令用于删除用户
格式为“userdel [选项] 用户名”
在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用-r参数将其删除。
userdel命令的参数以及作用:
参数 作用
-f 强制删除用户
-r 同时删除用户及用户家目录
下面使用userdel命令将linuxprobe用户删除,其操作如下:
id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
userdel -r linuxprobe
id linuxprobe
id: linuxprobe: no such user