将某行文件写入变量

时间:2015-11-03 08:17:29

标签: bash centos7

我正在尝试读出名为directorylist的文件的某一行。

我试图调试它,但我发现没有任何帮助。看来,命令变量不应该是“6p”。

(计数器现在是6)

p=p
command="$counter$p"


user= sed -n '$command' directorylist

chown $user:$user /home/$user

那些人知道问题出在哪里了?

提前致谢

EDIT1:

嗨,谢谢快速回应。

到目前为止,这是整个剧本:

#!/bin/bash

rm -f directorylist

touch directorylist


array=($(ls /home))

printf "%s\n" "${array[@]}" >> directorylist

counter= wc -l <directorylist 


recounter=0


while [[ $recounter != $counter ]]

do

((recounter=recounter+1))


p=p
command="$counter$p"


user= sed -n '$command' directorylist 

chown $user:$user /home/$user

done

EDIT2:

由于某种原因,它在变量中写了“ommand”:

chown: invalid user: ‘ommand:ommand’

EDIT3:

你是对的,问题在于引号。

但仍然有两件事我没有先得到:

chown: cannot access ‘random’: No such file or directory

这个目录当然存在。

其次是事实,它似乎忽略了循环条件。

到目前为止有六个用户(以及六个主目录)。第一个计数器是这个数字。第二个从零开始,继续上升一个。只要不相等,循环就应该继续。但那应该只需要6个循环。 :/

Edit4:

好像是

command="$counter$p"

出于某种原因正在清空$ counter。

因此命令变量只包含“p”。

2 个答案:

答案 0 :(得分:0)

立即工作; - )

#!/bin/bash -x

rm -f directorylist

touch directorylist


array=($(ls /home))

printf "%s\n" "${array[@]}" >> directorylist

counter="$(wc -l < directorylist)"


recounter=0


while [ "$recounter" != "$counter" ]

do

((recounter=recounter+1))


p=p
command="$counter$p"


user="$(sed -n $command directorylist)"

chown $user:$user /home/$user

done

答案 1 :(得分:0)

尝试:

#!/bin/bash

rm -f directorylist
touch directorylist

array=($(ls /home))

printf "%s\n" "${array[@]}" >> directorylist

counter=$(wc -l < directorylist)

recounter=0

p=p

while [[ $recounter != $counter ]]

do

((recounter=recounter+1))

command="$counter$p"


user=$(sed -n "$command" directorylist)

sudo chown $user:$user /home/$user

done
  

EDIT2:

     

由于某种原因,它正在编写&#34; ommand&#34;在变量中:

chown: invalid user: ‘ommand:ommand’

单引号&#39;