Linux read-here document-管道-脚本练习

read :接收用户在终端里输入的内容,然后复制给对应的变量

可以在脚本执行的时候,往脚本里输入内容
-p 提升字符串作用:prompt 提示

[root@sc ~]# read -p "请输入2个数字:" num1 num2
请输入2个数字:19 20
[root@sc ~]# echo $num1 $num2
19 20

[root@sc ~]# read num1 num2 
10 20
[root@sc ~]# echo $num1 $num2
10 20

返回值和输出结果是2个概念

返回值是命令执行完成后给bash的(仅能返回 [0, 255] 之间的整数,常用于表示返回函数的执行结果状态)
输出结果是命令执行过程中输出到屏幕上的,给人看的(能返回任何数字、任何字符串,常用于表示返回函数的执行结果)

编写脚本更好的理解输出结果和返回值

[root@sc read]# cat read_.sh 
#!/bin/bash

#返回值和输出结果 

#输出内容
read -p "请输入2个数字:" num1 num2

#让num1和num2进行加法运算,将结果赋值给sc_num
sc_num=$(( $num1 + $num2 ))

echo "2个数字的和是$sc_num"

#退出脚本
exit 123

[root@sc read]# bash read_.sh 
请输入2个数字:1 2
2个数字的和是3

[root@sc read]# echo $?
123

脚本练习

1.接收用户的输入,判断用户是否存在,如果用户存在就提醒用户已经存在,如果不存在就新建这个用户

[root@sc read]# cat create_user.sh 
#!/bin/bash

#输入用户名
read -p "请输入一个用户名:" username

#判断用户是否存在
if id $username &>/dev/null;then
	echo "$username用户已经存在"
else
	#不存在就新建用户
	useradd  $username
	echo "新建用户$username"
fi

[root@sc read]# bash create_user.sh 
请输入一个用户名:de
de用户已经存在

[root@sc read]# bash create_user.sh 
请输入一个用户名:yo
新建用户yo

| 管道:前面命令的输出送给后面的命令作为输入
命令1 | 命令2 管道符号只是将命令1的正确输出送给命令2,错误的默认情况下不送

[root@sc ~]# ls |grep go
go

[root@sc read]# lsls 2>&1 |grep ls
-bash: lsls: 未找到命令

<< : Here Document 是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生成出一个“文件”并用作“命令”的标准输入。

Here Document 是 Shell 中的一种特殊的重定向方式。

[root@sc read]# cat >feng.txt <<EOF
> 123
> EOF

[root@sc read]# cat feng.txt 
123

[root@sc read]# cat >>feng.txt <<end
> feng
> teacher
> linux
> end

[root@sc read]# cat feng.txt 
123
feng
teacher
linux

# 案例
[root@sc read]# cat qi.sh 
#!/bin/bash

#生成qi.txt文件
cat >/lianxi/chong/qi.txt <<EOF
zeng
qi
qi
linux
EOF

#判断这个文件是否生成,如果生成就输出里面的内容
if stat /lianxi/chong/qi.txt &>/dev/null;then
    cat /lianxi/chong/qi.txt
else
    echo "qi.txt文件不存在"
fi

[root@sc read]# bash qi.sh 
zeng
qi
qi
linux

2.判断用户名和密码是否正确

[root@sc read]# cat user_passwd.sh 
#!/bin/bash

#内定用户名密码
u_name=han
u_passwd=123

#接收用户的输入
read -p "请输入用户名和密码:" sc_username sc_passwd

#双中括号进行字符串的比较
if [[ $sc_username == $u_name && $sc_passwd == $u_passwd ]];then
    echo "欢迎$sc_username 登录系统"
else
    echo "sorry,请输入正确的用户名和密码,不能进入系统"
fi

[root@sc read]# bash user_passwd.sh 
请输入用户名和密码:han 123
欢迎han 登录系统

[root@sc read]# bash user_passwd.sh 
请输入用户名和密码:admin 11
sorry,请输入正确的用户名和密码,不能进入系统

3. 根据一个文件里的用户名和密码去创建用户,并且给用户设置密码
    目的是批量的去创建用户并且设置密码
    name.txt 文件内容如下:
    cali 12345a
    rose 123456
    jack 11122a
    qiqi 123459
    han  1298ab
    wie  12if10
    yao  12hu1u
    yiy  1igi13

需求分析:
while read u_name u_passwd
do
    useradd $u_name
    echo $u_passwd |passwd $u_name --stdin
done < name.txt
需要对用户进行判断,如果存在就不新建,修改密码;不存在就新建。

编写创建用户并且设置密码脚本

[root@sc read]# cat create_user_passwd.sh 
#!/bin/bash

while read u_name u_passwd
do
	# 判断用户是否存在
	if id $u_name &>/dev/null;then
		echo "$u_name用户已存在"
		# 设置密码
		echo $u_passwd |passwd $u_name --stdin 
	else
		# 新建用户
		useradd $u_name
		# 设置密码
		echo $u_passwd |passwd $u_name --stdin 
		
	fi

done < name.txt

[root@sc read]# bash create_user_passwd.sh 
更改用户 cali 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 rose 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 jack 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 qiqi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 han 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 wie 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 yao 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 yiy 的密码 。
passwd:所有的身份验证令牌已经成功更新。

[root@sc read]# bash create_user_passwd.sh 
cali用户已存在
更改用户 cali 的密码 。
passwd:所有的身份验证令牌已经成功更新。
rose用户已存在
更改用户 rose 的密码 。
passwd:所有的身份验证令牌已经成功更新。
jack用户已存在
更改用户 jack 的密码 。
passwd:所有的身份验证令牌已经成功更新。
qiqi用户已存在
更改用户 qiqi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
han用户已存在
更改用户 han 的密码 。
passwd:所有的身份验证令牌已经成功更新。
wie用户已存在
更改用户 wie 的密码 。
passwd:所有的身份验证令牌已经成功更新。
yao用户已存在
更改用户 yao 的密码 。
passwd:所有的身份验证令牌已经成功更新。
yiy用户已存在
更改用户 yiy 的密码 。
passwd:所有的身份验证令牌已经成功更新。

编写删除用户脚本

[root@sc read]# cat delete_user.sh 
#!/bin/bash

while read u_name u_passwd
do
	# 判断用户是否存在
	if id $u_name &>/dev/null;then
		userdel -r $u_name
		echo "$u_name用户已删除"
	fi

done < name.txt

[root@sc read]# bash delete_user.sh 
cali用户已删除
rose用户已删除
jack用户已删除
qiqi用户已删除
han用户已删除
wie用户已删除
yao用户已删除
yiy用户已删除

[root@sc read]# id cali
id: cali: no such user

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩未零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值