遍历文件以创建其他命令文件

时间:2019-06-22 19:46:53

标签: shell for-loop awk

我正在尝试创建一个脚本,该脚本将自动将我登录到特定的远程设备(我们称其为fw)。 “命令”有些复杂,因为我们是从受保护的网络服务器登录的,有数百个要登录。

我已经创建了一个文件,其中有两个参数(命令和名称),这些文件用“#”分隔,我要的第一个参数是带有空格(例如:“ sudo --user ....”)的“命令”字符串。将(回显)到名为“ name”(我要登录的设备的名称)的可执行文件中。

我的逻辑原本是:

for line in $(awk -F# '{print $1, $2}'  list.txt), do touch $2; && echo "$1 > $2" && chmod +x $2; done

我的终端应该创建x个名为“ $ name”的文件,每个文件只有一个单行命令“ $ command”,并且是“可执行的”。

我已经尝试了几种方法来使这项工作生效。我可以使用forwhile甚至是[[ -n $name ]]来迭代文件,但没有太多问题,但是,这仅为我提供了一个变量,而没有将行分为两部分我需要"$command""$name"。就我的目的而言,即使$1$2也可以...

同时进行测试:

$ while IFS=# read -r line; do echo "$line"; done < list
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy

即使使用IFS =#拆分$ line,也不会按预期方式删除“#”。

用于循环:

$ for line in $(cat list); do echo $line; done
 sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy
  sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy
  sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy

尝试扩展到:

bin$  for line in $(cat list); do awk -F# '{print $1, $2}'  $line; done
awk: fatal: cannot open file ` xxxxxxxxxxxxxxxxx' for reading (No such file or directory)
awk: fatal: cannot open file `yyyyyyyyy
 sudo --user xxxxxxxxxxxxxxxxx' for reading (No such file or directory)
awk: fatal: cannot open file `yyyyyyyyy
 sudo --user xxxxxxxxxxxxxxxxx' for reading (No such file or directory)

我想解析(循环)该文件-分离参数并在$ command中创建$ name并在chmod + x $ name中创建一个可执行文件,该文件将自动登录到“ $ name”节点。 / p>

1 个答案:

答案 0 :(得分:1)

我建议将您所有的逻辑插入awk脚本中。

script.awk

BEGIN {FS = "[\r#]"}    # set field separator to # or <CR>
{                   # for each input line
    print $1 > $2;  # write input 1st field to file named 2nd field
    system("chmod a+x "$2); # set file named 2nd field, to be  executable
}

运行脚本:

awk -f script.awk list.txt

输入list.txt

 sudo --user xxxxxxxxxxxxxx#yyyyyyyy1
 sudo --user xxxxxxxxxxxxxx#yyyyyyyy2
 sudo --user xxxxxxxxxxxxxx#yyyyyyyy3

输出:

dudi@DM-840$ ls -l yy*
total 3
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy1*
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy2*
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy3*

更新:

更改了FS以包含<CR>字符,否则附加到文件名(称为^M)。