编写shell
while条件循环语句
while往往用在并不确定执行的次数中。语法格式:
如:随机猜数字
[root@linuxprobe ~]# vim guess.sh
[root@linuxprobe ~]# cat guess.sh
#!/bin/bash
NUM=$(expr $RANDOM % 1000)
TIMES=0
echo "this is number 0~999,you try guess?"
while true
do
read -p "enter you numer:" N
let TIMES++
if [ $N -eq $NUM ] ; then
echo "very good,you right,the number is $NUM"
echo "you times to $TIMES"
exit
elif
[ $N -gt $NUM ] ; then
echo "too high!"
else
echo "too low!"
fi
done
[root@linuxprobe ~]#
expr 是取命令的执行结果,exit 是while语句中退出,因为while 一直循环的。
let TIMES++ 相当于 TIMS=`expr $TIMES + 1`
case条件测试语句
case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令,结束符实际是case的反写 esac。语法结构:
如:
[root@linuxprobe ~]# vim checkkeys.sh
[root@linuxprobe ~]# cat checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@linuxprobe ~]# bash checkkeys.sh
请输入一个字符,并按Enter键确认:a
您输入的是 字母。
[root@linuxprobe ~]# bash checkkeys.sh
请输入一个字符,并按Enter键确认:G
您输入的是 字母。
[root@linuxprobe ~]# bash checkkeys.sh
请输入一个字符,并按Enter键确认:9
您输入的是 数字。
[root@linuxprobe ~]# bash checkkeys.sh
请输入一个字符,并按Enter键确认:?/
您输入的是 空格、功能键或其他控制字符。
[root@linuxprobe ~]#
计划任务
分为一次性的和永久性(周期性的)
at 一次性计划任务,只执行一次就结束了
crond周期性,时间规则的,自动执行很多次
at 命令参数及作用
如:
[root@linuxprobe ~]# date
Sun Apr 17 12:52:40 CST 2022
[root@linuxprobe ~]# at 12:55
warning: commands will be executed using /bin/sh
at> reboot
at> <EOT>
job 1 at Sun Apr 17 12:55:00 2022
[root@linuxprobe ~]# at -l
1 Sun Apr 17 12:55:00 2022 a root
[root@linuxprobe ~]# atrm 1
[root@linuxprobe ~]# at -l
[root@linuxprobe ~]#
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 12:56
warning: commands will be executed using /bin/sh
job 2 at Sun Apr 17 12:56:00 2022
[root@linuxprobe ~]# at -l
2 Sun Apr 17 12:56:00 2022 a root
[root@linuxprobe ~]# atrm 2
[root@linuxprobe ~]# at -l
[root@linuxprobe ~]#
atrm 是删除任务,后面的数字是任务的序号。
不用固定时间,一般用“at now +2 MINUTE”的方式进行操作,这表示2分钟(MINUTE)后执行这个任务,也可以将其替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇
root@linuxprobe ~]# at now +2 MINUTE
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at 中使用ctrl+ d 结束编辑
crontab命令参数及作用
“分、时、日、月、星期 命令”。这是使用crond服务设置任务的参数格式。如果有些字段没有被设置,则需要使用星号()占位
计划任务中的“分”字段必须有数值,绝对不能为空或是号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
执行的命令需要使用绝对路径,可以通过which 命令 来查看
如:
[root@linuxprobe ~]# which reboot
/usr/sbin/reboot
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
0 2 1 3,6,9,12 * /usr/sbin/reboot
[root@linuxprobe ~]#
需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。还可以用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)
当然不用crontab命令进行编辑,也可以用vim /etc/crontab 这个里面写错了是没有任何提示的,crontab写错了保存有提示的。
用户身份与能力
在RHEL 8系统中,用户身份有:
管理员UID为0:系统的管理员用户。
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
注意哦: 如 UID=888 ,能否判断是系统用户呢。不一定哦。比如
[root@linuxprobe ~]# useradd -u 888 test
[root@linuxprobe ~]# id test
uid=888(test) gid=1001(test) groups=1001(test)
uid用户身份,gid组,gorups扩展组
其中组是用户新建的时候就系统自动生成了,也默认一个扩展组。扩展组可以有多个。如:
[root@linuxprobe ~]# usermod -G linuxprobe test
[root@linuxprobe ~]# id test
uid=888(test) gid=1001(test) groups=1001(test),1000(linuxprobe)
[root@linuxprobe ~]#
id命令
id命令用于显示用户的详细信息,语法格式为“id用户名”
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
useradd命令
useradd命令用于创建新的用户账户,语法格式为“useradd [参数] 用户名”
该命令创建用户账户时,默认的用户家目录会被存放在/home目录中
useradd命令中的参数以及作用
如:可以指定家目录和Uid,以及不能登录到系统
[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxdown
[root@linuxprobe ~]# id linuxdown
uid=8888(linuxdown) gid=8888(linuxdown) groups=8888(linuxdown)
groupadd命令
groupadd命令用于创建新的用户组,语法格式为“groupadd [参数] 群组名”
[root@linuxprobe ~]# groupadd ronny
usermod命令
usermod命令用于修改用户的属性,语法格式为“usermod [参数] 用户名”
usermod命令中的参数以及作用
如:
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[root@linuxprobe ~]# usermod -u 8888 linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linuxprobe ~]# usermod -s /sbin/nologin linuxprobe
[root@linuxprobe ~]# su - linuxprobe
This account is currently not available.
passwd命令
passwd命令用于修改用户的密码、过期时间等信息,语法格式为“passwd [参数] 用户名”
passwd命令中的参数以及作用
[root@linuxprobe ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@linuxprobe ~]#
看下锁定usermod 和 passwd
[root@linuxprobe ~]# passwd -S sony
sony PS 2022-04-17 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxprobe ~]# usermod -L sony
[root@linuxprobe ~]# passwd -S sony
sony LK 2022-04-17 0 99999 7 -1 (Password locked.)
[root@linuxprobe ~]# passwd -l test
Locking password for user test.
passwd: Success
[root@linuxprobe ~]# passwd -S test
test LK 2022-04-17 0 99999 7 -1 (Password locked.)
[root@linuxprobe ~]# usermod -U test
[root@linuxprobe ~]# passwd -S test
test PS 2022-04-17 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxprobe ~]#
userdel命令
userdel命令用于删除已有的用户账户,语法格式为“userdel [参数] 用户名”
userdel命令中的参数以及作用
[root@linuxprobe home]# ls
linuxprobe sony test workdir
[root@linuxprobe home]# userdel sony
[root@linuxprobe home]# ls
linuxprobe sony test workdir
[root@linuxprobe home]# userdel -r test
[root@linuxprobe home]# ls
linuxprobe sony workdir
[root@linuxprobe home]#
手动添加下用户
[root@linuxprobe home]# id redhat
id: ‘redhat’: no such user
#添加用户最后一行redhat
[root@linuxprobe ~]# vim /etc/passwd
[root@linuxprobe ~]# tail -n 3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
redhat:x:6666:6666:redhat:/home/redaht:/bin/bash
[root@linuxprobe ~]# id redhat
uid=6666(redhat) gid=6666 groups=6666
# 添加组redhat
[root@linuxprobe ~]# vim /etc/group
[root@linuxprobe ~]# tail -n 3 /etc/group
tcpdump:x:72:
linuxprobe:x:1000:
redhat:x:6666:
# 创建家目录并授权拥有者和组
[root@linuxprobe ~]# mkdir -p /home/redhat
[root@linuxprobe ~]# chown -Rf redhat:redhat /home/redhat
# 设置密码
[root@linuxprobe ~]# passwd redhat
Changing password for user redhat.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# 切换下redhat用户
[root@linuxprobe ~]# id redhat
uid=6666(redhat) gid=6666(redhat) groups=6666(redhat)
[root@linuxprobe ~]# su - redhat
[redhat@linuxprobe ~]$ pwd
/home/redhat
[redhat@linuxprobe ~]$