Если еще случай совпадения IP-адреса с именем сервера

Предполагая, что и folder1 , и folder2 находятся в родительской папке,

parent
   folder1
   folder2

Вы можете перефразировать цикл for следующим образом:

for file in ../folder2/*.csv

Как правило, вы всегда можете указать абсолютные пути к таким циклам:

for file in /home/username/parent/folder2/*.csv
do
    split -l 50000 -d -a 4  "$file" "$file"
done

Вышеупомянутый цикл будет работать независимо от того, в каком каталоге вы находитесь.

0
19.02.2019, 23:44
1 ответ

Во-первых, я предполагаю, что отсутствие места перед =в [ $trapaddress= "10.10.10.1" ]является опечаткой. Если бы это было не так, вы бы немедленно получили сообщение об ошибке [.

Во-вторых, у вас проблема в связи между операторами &&и ||. В оболочке они обрабатываются слева направо, поэтому ваше условие не делает то, что вы хотите. На самом деле это:

if cond1 && cond2 || cond3 && cond4; then... 

больше похоже на это:

if ((cond1 && cond2) || cond3) && cond4; then... 

Примечательно, что для этого требуется cond4 . Вы хотите либо

if (... &&...) || (... &&... ); then...

или

if [[... &&... ||... &&... ]]; then...

(В пределах [[.. ]]они действительно имеют обычный относительный приоритет.)

Если вы хотите, вы можете объединить переменные, чтобы упростить сравнение, предполагая, что они никогда не содержат, например. косая черта:

if [[ "$traphost/$trapaddress" = "trapserver1/10.10.10.1" ||
      "$traphost/$trapaddress" = "trapserver2/10.10.10.2" ]]; then...

Обратите внимание, что вы хотите заключать переменные в кавычки, чтобы избежать разделения слов, см. Когда необходимо двойное -цитирование?

1
28.01.2020, 02:41

Теги

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