2015-08-21 2 views
-1

нужно создать циклическую символическую ссылку на любой файл, который я хочу на любых пользователях i each ..!loop symbolic link 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

+0

У меня проблема с пониманием вашего вопроса. 1. В вашем образце вы выстраиваете файлы с разными расширениями (например, '.html' versus' .php' во второй строке), является ли это преднамеренным? –

+0

2. В вашем примере скрипта bash вы вызываете команду '-F:' с переменной оболочки 'a', установленной в' awk'. Вы, вероятно, хотели назначить результат команды 'a', верно? Например. 'a = $ (awk -F: ... | sort)'? –

+0

3. В вашем образцовом скрипте bash вы выполняете 'ln -s' с единственным аргументом (полное содержимое переменной оболочки' a', включая все пробелы и вложенные строки перевода строки). Однако 'ln -s' требует ровно два аргумента, источник и место назначения. Вы переходите к перенаправлению стандартного вывода этой команды в 'folder'.Однако для этого, папка должна быть файлом или должна быть создана как файл, но вы создали папку под этим именем во второй строке. –

ответ

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 

Это анализирует /etc/passwd в оболочке. IFS=: устанавливает внутренний разделитель полей , который используется read, чтобы разделить строки, считанные в полях. Первое поле назначается переменной оболочки user, а все остальные поля назначаются rest (и игнорируются).

Примечание: Возможно, это нормально для сценария, который используется один раз, но есть несколько вопросов, о которых вам следует знать.

  1. Возможно, вы не хотите делать символическую привязку для всех пользователей, только для обычных. Этот сценарий обеспечивает это, предполагая, что домашний каталог пользователя является/home/$ user, что обычно исключает пользователей root и других пользователей специального назначения. Однако это является хрупким, например. домашний каталог может быть назван по-разному в некоторых системах.

  2. Символьная связь не создается, если ни один из файлов не был найден в домашнем каталоге пользователя.

  3. Разрешения символической ссылки не регулируются. Результирующая символическая ссылка имеет разрешения, с которыми работает скрипт.

+0

привет спасибо за ваш повтор, но я Исполнение #/bin/bash IFS =: при чтении информации о пользователе; do для файла в public_html/wp-config; do если [-e "/ home/$ user/$ file"]; затем MkDir -p "/ главная/$ пользователь/папку" пер -s "/ главная/$ пользователь/$ файла" "/home/$user/folder/example.php" перерыв фи сделано сделано saba

 Смежные вопросы

  • Нет связанных вопросов^_^