扩展练习果汁售卖:
(1)显示饮品菜单以及对应价格
(2)用户选择自己喜欢的饮品,根据用户选择可以计算出对应价格。
第一步:创建shell(xx.sh)文件
在里面输入
:wq保存退出
结果:
第二题:显示/proc/meminfo文 件中以不区分大小的s开头的行:
可以使用 grep
命令来显示 /proc/meminfo
文件中以不区分大小写的 s
开头的行。可以使用 -i
参数来忽略大小写
使用awk
命令的这个命令在开始之前设置了IGNORECASE=1
,表示忽略大小写。然后使用正则表达式/^s/
来匹配以s
开头的行,并使用print
命令打印出来。
使用sed
命令
这个命令使用-n
参数来禁止默认输出,然后使用正则表达式/^s/I
来匹配以s
开头的行(I
表示忽略大小写),最后使用p
命令将匹配的行输出。
无论使用哪种方式,都可以筛选出/proc/meminfo
文件中以不区分大小写的s
开头的行。选择适合你需求的方式即可。
第三题:取出默认shell为/sbin/nologin的用户列表
要从Linux系统中提取默认 shell 为 /sbin/nologin
的用户列表,你可以使用 awk
命令组合 /etc/passwd
文件进行处理。以下是一个示例命令:
awk -F: '$7 == "/sbin/nologin" { print $1 }' /etc/passwd
这个命令使用 awk
工具,指定字段分隔符为 :
(由 -F:
参数指定)。然后,它检查每一行的第七个字段(默认 shell)是否为 /sbin/nologin
,如果是的话,就打印出该用户的用户名(第一个字段)。
运行以上命令后,将会显示出默认 shell 为 /sbin/nologin
的用户列表。请注意,这个列表包括了除 root 用户之外的所有用户。
如果你想查看该用户的其他信息,可以自行调整 print
语句或者修改其他的字段提取方式。
第四题:取出默认shell为bash,且其用户ID号最小的用户的用户名
要取出默认shell为bash且其用户ID号最小的用户的用户名,你可以使用`awk`命令组合`/etc/passwd`文件进行处理,并结合一些条件判断和变量赋值。以下是一个示例命令:
awk -F: '$7 == "/bin/bash" && ($3 < min || min == 0) { min = $3; user = $1 } END { print user }' /etc/passwd
这个命令首先指定了`awk`的字段分隔符为`:`(通过`-F:`参数指定)。然后它会检查每一行的第七个字段(默认shell)是否为`/bin/bash`,并且检查该用户的用户ID号(第三个字段)是否小于已知的最小值`min`,或者`min`的初始值为0的情况。如果满足这两个条件,就更新`min`的值为当前的用户ID号,并同时将该用户的用户名保存在`user`变量中。
当处理完所有行之后,在`END`部分,打印出记录的用户名`user`,即默认shell为bash且用户ID号最小的用户的用户名。
第五题:显示/etc/inittab中 以#开头,且后面跟-一个或多个空白字符,而后又跟了任意非空白字符的行
要显示`/etc/inittab`文件中以`#`开头,后面跟一个或多个空白字符,然后又跟了任意非空白字符的行,你可以使用`grep`命令和正则表达式。以下是示例命令:
grep "^#\s+-\S" /etc/inittab
这个命令使用`grep`工具,结合正则表达式`^#\s+-\S`来匹配满足条件的行。具体的正则表达式解释如下:
- `^#`:匹配以`#`开头的行。
- `\s+`:匹配一个或多个空白字符。
- `-`:匹配一个连接符(减号)。
- `\S`:匹配任意非空白字符。
这个命令将在`/etc/inittab`文件中搜索满足上述条件的行,并将它们打印出来。
请注意,`/etc/inittab`文件在一些Linux系统中已经被废弃,因此在某些发行版中可能不存在这个文件。你可以根据实际情况替换为其他适当的文件路径。
第六题:
显示/etc/inittab中包含 了:一个数值 (即两个冒号中间一个数字的行
/etc/passwd 多个冒号之间的数值匹配显示
若要显示 /etc/inittab
文件中包含了一个数值的行(即两个冒号之间有一个数字),可以使用 grep
命令和正则表达式来实现。以下是一个示例命令:
grep ':[0-9]:' /etc/inittab
这个命令使用 grep
工具,并使用正则表达式 :[0-9]:
来匹配满足条件的行。该正则表达式的含义如下:
:
:匹配冒号。[0-9]
:匹配一个数字。:
:匹配冒号。
这样,命令将匹配包含了一个数字的行,并将它们打印出来。
请注意,/etc/inittab
文件在某些Linux发行版中已被废弃或被替代,因此在某些系统中可能不存在。你可以根据实际情况替换为其他适当的文件路径。
同样地,要显示 /etc/passwd
文件中多个冒号之间的数值匹配,可以使用类似的命令。以下是一个示例命令:
awk -F: '$3 ~ /^[0-9]+$/' /etc/passwd
这个命令使用 awk
工具,设置字段分隔符为冒号(通过 -F:
参数)。然后,它检查每一行的第三个字段(用户ID)是否只包含数字(由正则表达式 /^[0-9]+$/
匹配)。如果匹配成功,则打印出该行。
运行以上命令后,将会显示 /etc/passwd
文件中多个冒号之间的数值匹配的行。
如图所示
第七题:显示/boot/grub2/grub.cfg文件中以一个或多个空白字符开头的行:
要显示 /boot/grub2/grub.cfg
文件中以一个或多个空白字符开头的行,可以使用 grep
命令和正则表达式来完成。以下是一个示例命令:
grep '^[[:space:]]' /boot/grub2/grub.cfg
这个命令使用 grep
工具,并使用正则表达式 ^[[:space:]]
来匹配满足条件的行。该正则表达式的含义如下:
^
:匹配行的起始位置。[[:space:]]
:匹配一个或多个空白字符。
这样,命令将匹配以一个或多个空白字符开头的行,并将它们打印出来。
请注意,这个命令假设 /boot/grub2/grub.cfg
文件存在,并且你有足够的权限来访问该文件。
第八题:显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
要显示 /etc/inittab
文件中以一个数字开头,并以与开头数字相同的数字结尾的行,可以使用 grep
命令和正则表达式来实现。以下是一个示例命令:
grep '^[0-9].*\b\([0-9]\)[^0-9]*$' /etc/inittab
这个命令使用 grep
工具,并使用正则表达式 ^[0-9].*\b\([0-9]\)[^0-9]*$
来匹配满足条件的行。该正则表达式的含义如下:
^
:匹配行的起始位置。[0-9]
:匹配一个数字。.*
:匹配任意数量的字符。\b
:匹配单词边界,确保数字结束位置与行尾相邻。\([0-9]\)
:匹配一个数字,并使用括号捕获。[^0-9]*$
:匹配零个或多个非数字字符,然后匹配行尾。
这样,命令将会匹配以一个数字开头,并以相同数字结尾的行,并将它们打印出来。
请注意,这个命令假设 /boot/grub2/grub.cfg
文件存在,并且你有足够的权限来访问该文件。
第九题:找出/proc/cpuinfo中的,1位数,或2位数;
要找出 /proc/cpuinfo
中包含 1 位数或 2 位数的行,可以使用 grep
命令并结合正则表达式来完成。以下是一个示例命令:
grep -E '^[0-9]{1,2}:' /proc/cpuinfo
这个命令使用 grep
工具,并使用正则表达式 ^[0-9]{1,2}:
来匹配满足条件的行。该正则表达式的含义如下:
^
:匹配行的起始位置。[0-9]{1,2}
:匹配一个或两个数字。:
:匹配冒号。
这样,命令将匹配包含 1 位数或 2 位数的行,并将它们打印出来。
请注意,/proc/cpuinfo
文件包含有关系统中每个 CPU 的信息。每个 CPU 的信息以一个数字后跟冒号开始。
10、查找当前系统上名字为student(必须出现在行首)的用户的账号的相关信息,文件为/etc/passwd
除了使用 grep
命令之外,还可以使用 awk
命令来查找 /etc/passwd
文件中以 “student” 开头的行。
以下是一个使用 awk
命令的示例:
awk -F: '/^student:/ { print }' /etc/passwd
这个命令使用 awk
工具,并使用正则表达式 /^student:/
来匹配以 “student” 开头的行。-F:
设置字段分隔符为冒号,这样才能获取到每个字段的内容。
在匹配到符合条件的行后,print
命令将打印整行。
这样,命令将在 /etc/passwd
文件中搜索满足条件的行,并将它们打印出来,显示与 “student” 相关的用户账号的其他信息。
请注意,/etc/passwd
文件包含了系统上的用户账号信息,每一行对应一个账号,在冒号(:) 分隔的不同字段中包含了各种相关信息,如用户名、用户 ID、用户组 ID、用户家目录、所使用的 Shell 等。