在shell脚本中循环符号链接passwd

时间:2015-08-21 10:53:24

标签: shell symlink passwd

需要为我想要的任何用户创建一个循环符号链接。!

我可以使用此命令

awk -F: ' { p="/home/"$1; printf "%s\n%s\n%s\n",p"/public_html/example.php",p"/www/example.html",p"/tmp/example.txt" }' /etc/passwd | sort

但如何为所有用户制作循环 和循环的输出像?????????:

example.php > /home/user1/public_html/example.php
example.html > /home/user2/www/example.php
example.php > /home/user2/tmp/example.txt
example.php > /home/user3/public_html/example.php
example.php > /home/user3/www/example.html
example.php > /home/user3/tmp/example.txt
[...snip...]

我的意思是...... 重复工作或上面所选文件的测试路径 并使用命令

为每个路径中的所有权限文件创建符号链接
ln -s

我尝试执行命令

#/bin/bash
mkdir folder
a=awk -F: ' { p="/home/"$1; printf "%s\n%s\n%s\n",p"/public_html/example.php",p"/www/example.html",p"/tmp/example.txt" }' /etc/passwd | sort
ln -s "$a" > folder
done

但它失败了

我等你的回答 ,,,谢谢stackoverflow.com

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

IFS=:
while read user rest; do
    for file in public_html/example.php www/example.php; do
        if [ -e "/home/$user/$file" ]; then
             mkdir -p "/home/$user/folder"
             ln -s "/home/$user/$file" "/home/$user/folder/example.php"
             break
        fi
    done
done </etc/passwd

解析shell中的/etc/passwdIFS=:设置内部字段分隔符read用于将读取的行拆分为字段。第一个字段分配给shell变量user,所有剩余字段都分配给rest(并忽略)。

注意:对于使用过一次的脚本,这可能没问题,但您应该注意几个问题。

  1. 您可能不希望为所有用户进行符号链接,仅适用于常规用户。这个脚本通过假设用户的主目录是/ home / $ user来确保这一点,这通常会排除root和其他特殊目的用户。但是,这很脆弱,例如在某些系统上,主目录的名称可以不同。

  2. 如果在用户的主目录中找不到任何文件,则不会创建符号链接。

  3. 不调整符号链接的权限。生成的符号链接具有脚本运行的权限。