2015-12-04 2 views
1

Использование Mac OSX Bash скрипт строку Error 7: [: слишком много аргументов Мой сценарий работает только показать вышеуказанную ошибку ...Mac OSX Bash сценарий слишком много аргументов во время поиска

Любая помощь будет большим.

if [ ! -f B*.mp3 ] 
then 
echo "No files" 
    exit 0 
    else 

do something.... 
fi 

ответ

2

В BASH вы можете сделать это, чтобы проверить на наличие соответствия файла с использованием B*.mp3 шаблона:

shopt -s nullglob 
arr=(B*.mp3) 

if ((${#arr[@]})) 
then 
    echo "No files" 
    exit 0 
else 
    echo "do something...." 
fi 
+0

Я пробовал все версии и очень много благодарностей за помощь: D – MrT

1

Bash будет расширяться B*.mp3 в список файлов; если есть несколько файлов, будет слишком много аргументов для команды test (aka [.) Вместо этого вы можете использовать find для проверки наличия нескольких файлов.

if [ -z "$(find . -name "B*.mp3" -maxdepth 1)" ] 
then 
echo "No files" 
    exit 0 
    else 

do something.... 
fi 
+1

У этой проблемы будет такая же проблема, если вы не ставите двойные кавычки вокруг подстановки команды - т.е. '' $ (find ...) "' –

+0

Спасибо, цитаты в нужном месте настолько просты, и так важно помнить ... – miken32

+0

Я пробовал все версии и очень много благодарю за помощь: D – MrT

0

Если нет никаких проблем в использовании списка позиционных параметров, это будет работать:

#!/bin/bash 
shopt -s nullglob  # Prevent that the B*.mp3 itself is the result. 
set -- ./B*.mp3  # Find files that match the pattern. 
if [ $# -lt 1 ];  # If there are 0 files .... 
then 
    echo "No files" 
    exit 0 
else 
    do something.... 
fi 
+0

Я пробовал все версии и Огромное спасибо за вашу помощь: D – MrT

Смежные вопросы