实验项目四:shell编程添加用户和密码
Skyen Lv4

在这里插入图片描述

实验内容与步骤

1. 使用for循环批量添加linux用户。

首先,创建文件,然后为文件授权,最后运行文件。
首先输入需要添加用户的总数量,然后进入for循环,添加用户。

在这里插入图片描述

在这里插入图片描述
也可以将输出的信息添加到user.txt文件。

在这里插入图片描述

2.名字,数量,密码不能为空if判断。

y=$(echo $num | sed ‘s/[0-9]//g’)
这句将num中素有数字替换成空字符串的代码也可以用以下正则的表达式书写

y=$(echo $num | sed ‘s/^[0-9]*$//g’)
它的意思是如果num是以数字开头和数字结尾的一个纯数字,那么替换成空字符串,否则不做替换

echo $pass | passwd –stdin $name$i
这句表示给用户赋予新的密码

在这里插入图片描述

在这里插入图片描述

以上是自己输入用户,自己进行添加
下面是添加类似stu1,stu2。。。类似的用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
read -t 30 -p "input name:" name
read -t 30 -p "input num:" num
read -t 30 -p "input password:" pass

if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
for (( i=1;i<=$num;i=i+1 ))
do
useradd $name$i &>/dev/null
echo $pass | passwd --stdin $name$i &>/dev/null
done
fi
fi

在这里插入图片描述

在这里插入图片描述

3.熟练使用sed命令判断num的数字类型命令。

采用if循环,通过sed来判断输入的num变量是否为整数,并在屏幕上进行相应的反馈。

在这里插入图片描述
在这里插入图片描述

4.使用管道操作条件。

管道就是一个进程与另一个进程之间通信的通道,它通常是用作把一个进程的输出通过管道连接到另一个进程的输入。它是半双工运作的,想要同时双向传输需要使用两个管道。管道又可以分为匿名管道和命名管道,shell中使用到的是匿名管道。
管道的本质是内存中的缓冲区,可以看作是打开到内存中的文件。所以需要使用两个文件描述符来索引它,一个表示读端,一个表示写端。并且规定,数据只能从读端读取、只能往写端写入。
在这里插入图片描述

管道的局限性:

① 数据自己读不能自己写。

② 数据一旦被读走,便不在管道中存在,不可反复读取。

③ 由于管道采用半双工通信方式。因此,数据只能在一个方向上流动。

④ 只能在有公共祖先的进程间使用管道。

管道命令的操作符是:”|”,它只能处理由前面一条指令传出的正确输出信息,对错误信息是没有直接处理能力的。然后,传递给下一条指令,作为操作对象。

基本格式: 指令1 | 指令2 | …

【指令1】正确输出,作为【指令2】的输入,然后【指令2】的输出作为【指令3】的输入,如果【指令3】有输出,那么输出就会直接显示在屏幕上面了。通过管道之后【指令1】和【指令2】的正确输出是不显示在屏幕上面的。

在这里插入图片描述

【提醒注意】:

管道命令只能处理前一条指令的正确输出,不能处理错误输出;
管道命令的后一条指令,必须能够接收标准输入流命令才能执行。