编写shell脚本从/etc/passwd文件中读取该文件的后5行内容
时间: 2023-06-04 13:07:24 浏览: 331
好的,这个问题是关于技术的,我可以回答。您可以使用 tail 命令来获取文件的最后几行。具体地,您可以使用以下命令来获取 /etc/passwd 文件的最后 5 行:
tail -n 5 /etc/passwd
请注意,-n 选项用于指定要显示的行数。
相关问题
编写shell脚本从/etc/passwd文件中读取该文件的后5行内容。 1)先检查/etc/passwd文件是否存在,否则打印“the file doesn't exist” 2)再检查/etc/passwd文件是否有可读权限,否则打印“sorry ,I unable to read the xx file” 分别给passwd文件赋予读权限,去掉passwd的只读权限,执行脚本,打印结果截图
好的,以下是符合要求的shell脚本代码:
```
#!/bin/bash
if [ ! -e /etc/passwd ]; then
echo "the file doesn't exist"
elif [ ! -r /etc/passwd ]; then
echo "sorry, I unable to read the /etc/passwd file"
else
tail -n 5 /etc/passwd
fi
```
你可以将以上代码保存为一个.sh文件,然后在终端中使用chmod命令给该文件赋予可执行权限,如下所示:
```
chmod +x filename.sh
```
然后使用以下命令执行该脚本:
```
./filename.sh
```
如果你想要测试一下这个脚本的输出,可以使用以下命令在/etc/目录下创建一个空的passwd文件,然后给该文件赋予读权限:
```
touch /etc/passwd
chmod +r /etc/passwd
```
然后在该文件中添加一些文本内容,以便能够看到tail命令的输出效果。最后执行脚本,即可看到输出结果。
用shell命令/etc/passwd文件匹配“oo”前面不是字母的行,并显示行号
在 shell 中,我们可以使用 `grep` 和 `awk` 命令结合来完成这个任务。首先,`grep` 可以用来查找包含特定模式的行,而 `awk` 可以帮助我们判断行首字符是否为字母以及显示行号。下面是一个示例步骤:
```sh
# 使用 grep 查找含有 "oo" 的行
grep -l 'oo' /etc/passwd | while read line; do
# 使用 awk 检查行首字符,如果不是字母则打印行号
echo -n "$(tac $line) (row $(head -n 1 $line | awk '{print NR}'))" | tail -n +2
done
```
这里解释一下步骤:
1. `grep -l 'oo' /etc/passwd`:找到所有包含 "oo" 字符串的行并列出对应的文件名(/etc/passwd),因为我们需要后续读取文件,所以使用 `-l` 选项只输出文件名。
2. `while read line`:将每行文件名读入变量 `$line`,然后进入循环。
3. `awk '{print NR}'`: 运行 awk,在行首获取行号(NR表示当前记录序号)。
4. `head -n 1 $line`:取出行首内容。
5. `awk '{if(NR == 1 && !isalpha($0[1])) print ...}'`:如果这是第一行(NR == 1),并且第一个字符不是字母(`!isalpha()` 函数检查),那么打印行号和其他信息。
6. `tac $line`:由于awk默认从第2行开始处理,我们需要先反向读取(tac),然后再过滤,最后使用 `tail -n +2` 排除awk处理的首行。
注意,这个脚本假设 `/etc/passwd` 文件的第一列是用户名,如果结构不同,可能会需要调整awk的部分。另外,这个例子假设 `isalpha` 函数已存在,实际操作中可能需要自定义或查阅相应工具库。
阅读全文