rhce-07 第17-18题

rhce-07 第17-18题

题目列表

17.创建一个脚本

18.创建一个添加用户的脚本

17.创建一个脚本

在system1上创建一个名为/root/foo.sh的脚本,让其提供下列特性:

1)当运行/root/foo.sh redhat,输出fedora。

2)当运行/root/foo.sh fedora,输出redhat。

3)当没有任何参数或者参数不是redhat或者fedora时,其错误输出产生以下的信息:

/root/foo.sh redhat|fedora

system1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# vim /root/foo.sh
[root@localhost ~]# chmod +x foo.sh
[root@localhost ~]# cat foo.sh
#!/bin/bash
case $1 in
redhat)
echo "fedora"
;;
fedora)
echo "redhat"
;;
*)
echo "/root/foo.sh redhat|fedora"
;;
esac
[root@localhost ~]# ./foo.sh
/root/foo.sh redhat|fedora
[root@localhost ~]# ./foo.sh redhat
fedora
[root@localhost ~]# ./foo.sh fedora
redhat
[root@localhost ~]#

18.创建一个添加用户的脚本

  在system1上创建一个名为/root/batchusers,此脚本能够实现为系统system1创建本地用户,并且这些用户的用户名来自一个包含用户名列表的文件,同时满足下列要求:

1)此脚本要求提供一个参数,此参数就是包含用户名列表的文件。

2)如果没有提供参数,此脚本应该给出下面的提示信息Usage: /root/batusers userfile ,并且退出返回相应的值。

3)如果提供一个不存在的文件名,此脚本应该给出下面的提示信息Input file not found然后退出并返回相应的值。

4)创建的用户不可登录交互式shell。

5)此脚本不需要为用户设置密码。

6)您可以从下面的URL获取用户列表作为测试用:

http://classroom.example.com/materials/userlist

system1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# vim /root/batchusers
[root@localhost ~]# chmod +x batchusers
[root@localhost ~]# cat batchusers
#!/bin/bash
if [ $# == 1 ];then
if [ -f $1 ];then
while read username;do
useradd -s /bin/false $username &>/dev/null
done<$1
else
echo "Input file not found"
fi
else
echo "Usage: /root/batusers userfile"
fi
[root@localhost ~]# ./batchusers
Usage: /root/batusers userfile
[root@localhost ~]# ./batchusers 123
Input file not found
[root@localhost ~]# wget http://classroom.example.com/materials/userlist
[root@localhost ~]# ./batchusers userlist
[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# curl http://classroom.example.com/materials/userlist

验证:

命令解析

bash的单引号’’,双引号””和反引号的区别。

  单引号’ ‘ 和双引号” “,这两者都是解决变量中间有空格的问题。在bash中,空格是一种很特殊的字符,比如在bash中这样定义string=hello world,这样就会报错,为了避免出错就得使用单引号’ ‘和双引号” “。

单引号’’,双引号””的区别

1)单引号’ ‘剥夺了所有字符的特殊含义,单引号’ ‘内就变成了单纯的字符。

2)双引号” “则对于双引号” “内的参数替换($)和命令替换。

1
2
3
4
5
6
7
8
9
[root@localhost ~]# bash
[root@localhost ~]# n=100
[root@localhost ~]# echo '$n'
$n
[root@localhost ~]# echo "$n"
100
[root@localhost ~]# echo $n
100
[root@localhost ~]#

反引号

  反引号是命令替换,命令替换是指Shell可以先执行中的命令,将输出结果暂时保存,在适当的地方输出。下面的例子中,将命令执行结果保存在变量中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# bash
[root@localhost ~]# mydate=date
[root@localhost ~]# echo "mydate"
mydate
[root@localhost ~]# echo "$mydate"
date
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# mydate='date'
[root@localhost ~]# echo "$mydate"
date
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# mydate=`date`
[root@localhost ~]# echo "$mydate"
2019年 08月 08日 星期四 16:46:04 CST
[root@localhost ~]#

  由上面的三个例子可以看出,无论用单引号还是不加符号,都只能将字符串date赋值给mydate变量,导致后面输出这个变量的时候仅仅是输出字符串date。

  而用单引号的时候,可以看到将date命令执行结果赋值给了mydate变量,所以后面输出这个变量的时候得以输出date命令的执行结果。

欢迎打赏,谢谢
------ 本文结束------
0%