проблема с использованием оператора if error -> [: отсутствует `]'

Я бы сделал в bash

{ echo -e "head1\thead2" ; cat output ; } > newoutput

по сравнению с ответом Романа Перехреста, он будет работать правильно даже для очень длинных файлов (он сначала загрузит файл в память, а затем выполнит эхо; также bash имеет имхо некоторую максимальную длину ввода)

0
15.01.2018, 20:42
3 ответа

El siguiente código debería funcionar:

#!/bin/bash

for (( x=7; x <= 65; x+=2 )) 
do
    if [ "$x" -ne 57 ] && [ "$x" -ne 59 ] && [ "$x" -ne 29 ] && [ "$x" -ne 53 ]; then
        cd charged_$x 
        cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so.
        cd..
    fi
done
  • Es mejor tener llaves separadas para cada condición.
  • Deberíamos usar -neen lugar de !=, ya que estamos comparando números enteros.
1
28.01.2020, 02:16

Su código tiene dos errores :El operador !=necesita espacios a su alrededor, y el &&debe estar entre pruebas individuales [... ].

En lugar de usar muchas pruebas individuales:

for (( x = 7; x <= 65; x += 2 )); do
    case $x in
        29|53|57|59) ;;
        *)
            cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so "charged_$x"
    esac
done

También he quitado la mitad inútil cd.

0
28.01.2020, 02:16
[ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]

[— это команда, она подчиняется тем же правилам, что и, скажем, ls. &&— это оболочка для условной группировки команд. В [ foo && bar ]оболочка запускает команду [ foo, и в случае успеха запускает bar ]. Команда [завершается ошибкой, так как она ожидает увидеть ]в качестве своего последнего аргумента, поэтому вторая команда не запускается.

Однако специальный условный синтаксис [[.. ]]поддерживает &&внутри него, поэтому вы можете использовать [[ $x != 57 && $x != 59 &&... ]]. Обратите внимание, что для этого по-прежнему требуются пробелы вокруг операторов. Обычный $x!=57будет проверкой, чтобы увидеть, является ли $x!=57непустой строкой, что всегда так, независимо от значения x.

Или поставьте закрывающий ]перед&&:[ "$x" != 57 ] && [ "$x" != 59 ] &&...

4
28.01.2020, 02:16

Теги

Похожие вопросы