【问题标题】:Error Shell Script错误外壳脚本
【发布时间】:2016-05-03 18:36:03
【问题描述】:

当我尝试运行此脚本时出现此错误:操作额外的 /home/ubuntu/Desktop/Destino/,我不知道为什么,请有人帮助我。

#!/bin/bash

input="/home/ubuntu/Desktop/Output/SAIDA.txt"
dt=`date +"%Y%m%d%H%M%S"`

layout='C'

if [ -e "$input" ] ; then
    header=$(head -n 1 $input)
    export header

    tail -n +2 $input | split -l 99 -d --additional-suffix=.txt \ --filter='{   printf %s\\n "$header"; cat; }' >/home/ubuntu/Desktop/Destino/$FILE - NOMENCLATURA_${dt}_

    for arquivo in ´Is/home/ubuntu/Desktop/*.txt´
    do
        NOME= ´cat $arquivo | cut -d "." -f1´
        touch/home/ubuntu/Desktop/Destino/$NOME.cfg
        echo $dt > $NOME.cfg
        echo $layout > $NOME.cfg
    done    

else
    echo "The input file does not exist."
fi

【问题讨论】:

  • 有很多错误。 shellcheck.net 可以告诉你更多。
  • $FILE 未定义。但是,正如@Biffen 所说,您必须克服许多错误。

标签: linux bash shell ubuntu scripting


【解决方案1】:

您的脚本中有一些奇怪的引号字符。要替换命令的输出,请将其用$() 或反引号括起来,而不是´ 字符。

for arquivo in ´Is/home/ubuntu/Desktop/*.txt´

我猜Is 应该是ls,但你在它后面留下了空格。但是不需要解析ls的输出,直接使用通配符即可。

for arquivo in /home/ubuntu/Desktop/*.txt

在这一行:

tail -n +2 $input | split -l 99 -d --additional-suffix=.txt \ --filter='{   printf %s\\n "$header"; cat; }' >/home/ubuntu/Desktop/Destino/$FILE - NOMENCLATURA_${dt}_

由于有空格,您需要将输出文件名放在引号中。

tail -n +2 $input | split -l 99 -d --additional-suffix=.txt \ --filter='{   printf %s\\n "$header"; cat; }' >"/home/ubuntu/Desktop/Destino/$FILE - NOMENCLATURA_${dt}_"

另外,FILE 变量未设置,您需要提前分配。

在这一行:

    NOME= ´cat $arquivo | cut -d "." -f1´

您再次使用错误类型的引号来捕获命令的输出。此外,= 和要分配的值之间不得有空格。应该是:

NOME=$(cat $arquivo | cut -d "." -f1)

没有必要做export header。该变量仅在此脚本中使用,而不在任何子进程中使用。

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多