Как найти сценарий оболочки, который принимает один или несколько аргументов и выводит строку для каждого аргумента с именем файла UTF-8? - PullRequest
0 голосов
/ 26 января 2019

Я понимаю, что должен использовать массив аргументов, но у меня нет такого опыта. Я использую Emacs для сценариев оболочки. Это то, что я до сих пор:

#!/bin/bash  
find $@ -type f -exec file {} + | grep UTF-8

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Я не понимаю, почему вы хотите использовать $ @ (каждый параметр), но я бы решил вашу проблему следующим образом:

#!/bin/bash
ARR=($(find . -type f -exec file {} + | grep script | sed -r 's/([^:]*).*/\1/'))
for i in ${ARR[@]}; do
    if [ -x $i ]; then
        echo "$i is an executable script"
    fi
done

Найти каждый файл (включая двоичные файлы), отфильтровать сценарии оболочки с помощью grep и взять только имя файла с помощью sed:

find . -type f -exec file {} + | grep script | sed -r 's/([^:]*).*/\1/')

Вы можете перебирать элементы массива, используя индекс "@". Есть еще несколько других, которые могут быть полезны в будущем:

for i in ${ARR[@]}; do
    #code
done

Наконец, проверьте, исполняется ли скрипт с параметром -x из [

if [ -x $i ]; then
    #do something
fi

p.s. не vim лучше чем emacs? ; -)

0 голосов
/ 26 января 2019

ответ, потому что я пока не могу комментировать:

"$@" и "${name[@]}" всегда должны использоваться с двойными кавычками.В противном случае слова с пробелами нарушаются.Подробности смотрите в "man bash".

0 голосов
/ 26 января 2019

Просто зациклите аргументы с for

#!/bin/bash  
for f in $@; do find -name "$f" -type f -exec file {} \; | grep UTF-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...