Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 试图在awk中创建字符串时,抱怨使用零除法_Bash_Unix_Awk_Terminal - Fatal编程技术网

Bash 试图在awk中创建字符串时,抱怨使用零除法

Bash 试图在awk中创建字符串时,抱怨使用零除法,bash,unix,awk,terminal,Bash,Unix,Awk,Terminal,我正试图创建一个脚本,自动创建一个特定文件夹下所有文件夹的符号链接,这应该很难做到,但由于某些原因,我的变量在这个单行脚本中传递得非常奇怪 #!/bin/bash # ---------------------------------- # --------- TotalKrill ------------- # ---------------------------------- # Script to create symlinks to my clouded folder in my ho

我正试图创建一个脚本,自动创建一个特定文件夹下所有文件夹的符号链接,这应该很难做到,但由于某些原因,我的变量在这个单行脚本中传递得非常奇怪

#!/bin/bash
# ----------------------------------
# --------- TotalKrill -------------
# ----------------------------------
# Script to create symlinks to my clouded folder in my home directory by listing all  folders/files in the cloudfolder and then creating symlinks in destfolder
# 
myname=`whoami`
searchfolderdir=/home/$myname/
searchfoldername=ownCloud
destfolder=~/
Target=$searchfolderdir$searchfoldername/

ls -1 $searchfolderdir$searchfoldername | awk {'print ln -fs $Target$0 $destfolder/$0'} #|sh 
但是我得到一个输出:awk:cmd。第1行:(FILENAME=-FNR=1)致命:尝试用零除

谁能告诉我一个更好的方法或者告诉我如何修复这个脚本? 注释掉了“| sh”,这样我可以在运行之前获得正确的行

在Ubuntu12.10 x64上尝试让它工作。

您需要的是(至少在语法上):

注:

  • 如果不需要除法运算符,而需要文字字符
    /
    ,则需要将其包含在双引号中

  • 字符串需要在
    awk
    中用双引号括起来,就像字符串
    ln-fs

  • 您需要使用
    -v
    选项将shell变量传递给awk

  • 你应该总是引用你的变量

  • 靠近块的花括号需要位于单引号内


添加两个其他修复程序,如使用
find
仅返回目录:

#!/bin/bash

myname=$(whoami)
dir="/home/$myname/"
folder="myCloud"
destination="~/"
target="${dir}${folder}"

find "${target}" -maxdepth 1 -type d -print | 
awk -v t="$target" -v d="$destination" '{print "ln -fs",t$0"/",d}' 

一些评论/问题:1)目录/文件名中是否有空格或其他特殊字符?2)
ls-1
也返回文件你只想创建那些目录吗?ls-1$searchfolderdir$searchfoldername | awk-v t=“$Target”-v d=“$searchfolderdir”{print“ln-fs”t$0,d$0}sh
#!/bin/bash

myname=$(whoami)
dir="/home/$myname/"
folder="myCloud"
destination="~/"
target="${dir}${folder}"

find "${target}" -maxdepth 1 -type d -print | 
awk -v t="$target" -v d="$destination" '{print "ln -fs",t$0"/",d}'