Вопросы с тегом «shell-script»

Вопросы о сценариях оболочки, исполняемых файлах, которые интерпретируются оболочкой (bash, zsh и т. Д.).

460
Почему лучше использовать «#! / Usr / bin / env NAME» вместо «#! / Path / to / NAME» в качестве моего шебанга?

Я заметил, что некоторые сценарии, которые я приобрел у других, имеют шебанг, в #!/path/to/NAMEто время как другие (использующие тот же инструмент, NAME) имеют шебанг #!/usr/bin/env NAME. Кажется, что оба работают правильно. В руководствах (например, по Python), кажется, есть предположение, что...

427
Использование «$ {a: -b}» для назначения переменных в скриптах

Я смотрел на несколько сценариев, написанных другими людьми (в частности, на Red Hat), и многие их переменные присваиваются с использованием следующих обозначений VARIABLE1="${VARIABLE1:-some_val}" или некоторых других переменных. VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" Какой смысл использовать...

360
В Bash, когда для псевдонима, когда для сценария, и когда написать функцию?

У меня ушло почти 10 лет использования Linux, чтобы задать этот вопрос. Все это было методом проб и ошибок и случайным ночным интернет-серфингом. Но людям не нужно 10 лет для этого. Если бы я только начинал с Linux, я бы хотел знать: когда использовать псевдоним, когда писать сценарий и когда...

285
Почему мой сценарий оболочки заглушает пробелы или другие специальные символы?

Или вводное руководство по надежной обработке имени файла и другой передаче строк в сценариях оболочки. Я написал сценарий оболочки, который работает хорошо большую часть времени. Но он душит некоторые входные данные (например, некоторые имена файлов). Я столкнулся с такой проблемой, как: У меня...

273
Как я могу получить свой внешний IP-адрес в сценарии оболочки?

Мне нужно найти мой внешний IP-адрес из сценария оболочки. На данный момент я использую эту функцию: myip () { lwp-request -o text checkip.dyndns.org | awk '{ print $NF }' } Но это зависит от того perl-libwww, perl-html-format, perl-html-treeустановлен. Какими еще способами я могу получить свой...

248
Какие символы мне нужно экранировать при использовании sed в скрипте sh?

Возьмите следующий скрипт: #!/bin/sh sed 's/(127\.0\.1\.1)\s/\1/' [some file] Если я попытаюсь запустить это в sh( dashздесь), это потерпит неудачу из-за круглых скобок, которые должны быть экранированы. Но мне не нужно избегать обратной косой черты (между октетами или в \sили \1). Какое правило...

243
Как передать аргумент командной строки в сценарий оболочки?

Я знаю, что сценарии оболочки просто запускают команды, как если бы они выполнялись в командной строке. Я хотел бы иметь возможность запускать сценарии оболочки, как если бы они были функциями ... То есть, принимая входное значение или строку в сценарий. Как мне подойти к...

240
Как я могу проверить, является ли переменная пустой или содержит только пробелы?

Следующий синтаксис bash проверяет, paramне является ли он пустым: [[ ! -z $param ]] Например: param="" [[ ! -z $param ]] && echo "I am not zero" Нет выхода и его хорошо. Но когда paramпусто, за исключением одного (или более) пробела, тогда дело обстоит иначе: param=" " # one space [[ ! -z...

220
Очистить содержимое файла

Мне известны три способа удаления всех записей из файла. Они есть >filename touch filename filename < /dev/null Из этих трех я злоупотребляю >filenameбольше всего, так как для этого требуется наименьшее количество нажатий клавиш. Тем не менее, я хотел бы знать, какой из трех наиболее...

206
Последствия для безопасности: забыть заключить переменную в оболочку bash / POSIX

Если вы следили за unix.stackexchange.com какое-то время, вы должны надеяться, что уже знаете, что оставление переменной без кавычек в контексте списка (как в echo $var) в оболочках Bourne / POSIX (исключение zsh) имеет очень особое значение и не должно быть сделано, если у вас нет очень веских...

168
Как изменить расширение нескольких файлов?

Я хотел бы изменить расширение файла с *.txtна *.text. Я попытался использовать basenameкоманду, но у меня возникают проблемы при изменении более одного файла. Вот мой код: files=`ls -1 *.txt` for x in $files do mv $x "`basename $files .txt`.text" done Я получаю эту ошибку: basename: too many...

155
Как обрезать начальные и конечные пробелы в каждой строке некоторого вывода?

Я хотел бы удалить все начальные и конечные пробелы и вкладки из каждой строки в выводе. Есть ли простой инструмент, как trimя мог бы передать свой вывод? Пример файла: test space at back test space at front TAB at end TAB at front sequence of some space in the middle some empty lines with...

129
В скрипте bash, используя условное «или» в выражении «если»

Этот вопрос является своего рода продолжением моего предыдущего вопроса . Пользователи на этом сайте любезно помогли мне определить, как написать forцикл bash, который перебирает строковые значения. Например, предположим, что переменная управления цикла fnameперебирает строки "a.txt" "b.txt"...

120
Когда необходимо двойное цитирование?

Старый совет заключался в том, чтобы заключать в двойные кавычки любое выражение, включающее $VARIABLE, по крайней мере, если кто-то хотел, чтобы оболочка интерпретировала его как один отдельный элемент, в противном случае любые пробелы в содержимом $VARIABLEбудут отбрасывать оболочку. Однако я...

118
Были ли помечены обратные пометки (то есть `cmd`) в оболочках * sh?

Я видел этот комментарий много раз в Unix и Linux, а также на других сайтах, которые используют фразу «обратные ссылки не рекомендуется», в отношении оболочек, таких как Bash & Zsh. Это утверждение верно или...