shell脚本错误

时间:2011-06-19 14:11:23

标签: shell unix

作为家庭作业的一部分,我发现很难执行以下两个命令。你能否纠正其中的错误。提前致谢

  

编写一个程序,它将获取一个包含一组目录的文件    查看这些目录及其子目录中的任何名为core的文件。*   和* .o并将打印所有此类文件的报告。 (你可以使用find)

对于上述程序,我试图这样做。

cat prog1 | xargs find /$0 -name 'core.*' or '*.o'

但是我收到以下错误。 (prog1是包含目录列表的文件)

find: paths must precede expression: perl
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

接下来的问题是:

  

编写一个将通过/ etc / passwd文件的脚本,并从此打印系统中的用户列表,他们的主目录和他们正在使用的shell

我尝试了以下内容:

awk '{print "USER \t\t HOME \t\t BASH \n split($0,a,":")}
     {print $a[1] \t\t $a[6] \t\t   $a[7]}' /etc/passwd

我尝试使用谷歌搜索并查看人员条目,但我不明白错误。您也可以为初学者提供一些有用的shell脚本编写链接吗?

2 个答案:

答案 0 :(得分:1)

Write a program, that will take a file which has a set of directories, and will
look into these directories and their sub directories for any files named core.*
and *.o and will print a report of all such files found.  (you can use find) 

我建议关注oneliner:

find `paste -s -d' ' directories.list` -type f -name 'core.*' -or -name '*.o'

其中directories.list包含目录名称,逐行显示。

Write a script that will go through the /etc/passwd file, and from this print a
list of users in the system, their home directory and the shell that they are
using

试试这个:

awk -F: 'BEGIN{print "USER\t\tHOME\t\tSHELL"}{printf("%s\t\t%s\t\t%s\n", $1, $6, $7)}' /etc/passwd

答案 1 :(得分:0)

提示1:find不理解“或”。 运算符遵循与其他选项相同的模式。

提示2:awk可以使用自定义分隔符/ 字段分隔符