Linux学习笔记--7(循环语句与计划任务及用户身份)

本文介绍了Linux中的shell脚本编写,包括while条件循环和case条件测试语句的使用,以及如何创建和管理一次性及周期性的计划任务。通过at命令设置一次性任务,crontab命令设置周期性任务,并探讨了用户身份与权限管理,如useradd、usermod、groupadd、passwd和userdel等命令的使用。
摘要由CSDN通过智能技术生成

编写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 ~]$ 

照片见证

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值