Запитання з тегом «shell-script»

Запитання щодо скриптів оболонки, виконуваних файлів, які інтерпретуються оболонкою (bash, zsh тощо).


1
Чи є в Bash, якщо [-z "$ 1"] і якщо ["$ 1" = ""] однакові?
У сценарії оболонки Баша, яка різниця (якщо така є) між наступними двома твердженнями? 1.) if [ -z "$1" ] 2.) if [ "$1" = "" ] Я виявив, що я пишу другий у деяких сценаріях, але потім прочитав тут, що за допомогою -zдосягається те саме. Якщо з використанням другої є …

1
Чому "-" у "#! / бін / ш - ”shebang?
#! / бін / ш - Часто рекомендований шебанг є (або принаймні був), щоб інтерпретувати сценарій /bin/sh. Чому б не просто #! /bin/shчи #!/bin/sh? Для чого це -?

7
Перетворіть підкреслення в PascalCase, тобто UpperCamelCase
Якщо у мене є рядок, який виглядає приблизно так: "this_is_the_string" Всередині bash-сценарію я хотів би перетворити його в PascalCase, тобто UpperCamelCase, щоб виглядати так: "ThisIsTheString" Я виявив, що перетворення на нижчийCamelCase можна зробити так: "this_is_the_string" | sed -r 's/([a-z]+)_([a-z])([a-z]+)/\1\U\2\L\3/' На жаль, я недостатньо знайомий з регулярними виразами, щоб змінити це.


9
для vs знайти у Bash
При перегляді файлів є два способи: використовувати for-loop: for f in *; do echo "$f" done використання find: find * -prune | while read f; do echo "$f" done Якщо припустити, що ці дві петлі знайдуть однаковий список файлів, які відмінності у цих двох варіантах у виконанні та обробці?

2
Яка різниця між одинарними та подвійними рівними знаками (=) у порівняннях оболонок?
Прочитайте, що для порівняння рядків всередині ifнам потрібно використовувати подвійні квадратні дужки. У деяких книгах сказано, що порівняння можна зробити за допомогою =. Але це ==теж працює. #!/bin/bash a="hello" b="world" if [[ $a == $b ]];then echo "equal" fi Чи є різниця між порівнянням =та ==у порівнянні?

5
Видалити діапазон рядків вище шаблону за допомогою sed (або awk)
У мене є такий код, який видалить рядки з малюнком bananaта 2 рядки після нього: sed '/banana/I,+2 d' file Все йде нормально! Але мені це потрібно, щоб вилучити два рядки раніше banana , але я не можу отримати його зі знаком "мінус" або будь-яким іншим (подібним до того, що grep …

3
Що означає "while:;"?
Я знаю, що таке whileпетля. Однак я бачив, як це працює з: while [condition] while ![condition] while TRUE (infinite loop) Якщо заява після whileмає бути TRUEабо FALSE. Існує вбудована команда оболонки з назвою :. Це описується як фіктивна команда, яка нічого не робить, але я не знаю, чи тут вона …

4
Якщо інше твердження еквівалентно логічному та && або || і де я віддаю перевагу одному над іншим?
Я дізнаюся про структури прийняття рішень і натрапив на ці коди: if [ -f ./myfile ] then cat ./myfile else cat /home/user/myfile fi [ -f ./myfile ] && cat ./myfile || cat /home/user/myfile Вони обидва поводяться однаково. Чи є якісь переваги використання одного способу від іншого?

2
Правильна поведінка пасток EXIT та ERR при використанні `set -eu`
Я спостерігаю якусь дивну поведінку під час використання set -e( errexit), set -u( nounset) поряд із пастками ERR та EXIT. Вони здаються спорідненими, тому поставити їх в одне питання здається розумним. 1) set -uне викликає помилок ERR Код: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} Очікується: …

2
sudo: неможливо виконати ./script.sh: такого файлу чи каталогу немає
Я тупаю. У моєму /homeкаталозі є сценарій, який виконується: [user@server ~]$ ll total 4 -rwx------ 1 user user 2608 Jul 15 18:23 qa.sh Однак, коли я намагаюся запустити його, sudoвін каже, що він не може його знайти: [user@server ~]$ sudo ./qa.sh [sudo] password for user: sudo: unable to execute ./qa.sh: …



8
У чому полягає корисність команди: scripting shell, якщо вона явно нічого не робить?
У відповіді на це запитання про коментарі в сценарії оболонок вказується, що :це команда "null", яка явно нічого не робить (але не використовується для коментарів). Яка була б корисність команди, яка абсолютно нічого не робить?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.