タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。


1
Bashでは、if [-z“ $ 1”]とif““ $ 1” =“”]は同じですか?
Bashシェルスクリプトでは、次の2つのステートメントの違い(ある場合)は何ですか? 1.) if [ -z "$1" ] 2.) if [ "$1" = "" ] いくつかのスクリプトで2番目のスクリプトを作成していることに気付きましたが、使用すると同じことが実現することをここで読みました-z。 2番目のものを使用する際に問題がある場合、最初のものが少し良く見えることを無視する必要がありますか?

7
アンダースコアをPascalCase、つまりUpperCamelCaseに変換します
次のような文字列がある場合: "this_is_the_string" bashスクリプト内で、PascalCase、つまりUpperCamelCaseに変換して、次のようにします。 "ThisIsTheString" lowerCamelCaseへの変換は次のようにできることがわかりました。 "this_is_the_string" | sed -r 's/([a-z]+)_([a-z])([a-z]+)/\1\U\2\L\3/' 残念ながら、これを修正するための正規表現についてはあまり詳しくありません。

14
FFmpegですべての* flacを* .mp3に変換するBashスクリプト?
特定のフォルダー内のすべての* .flacを* .mp3に変換したい。 これは私が試したものですが、動作しません: # change to the home directory cd ~/music # convert all *.flac files ffmpeg -i *.flac -acodec libmp3lame *.mp3 # (optional: check whether there are any errors printed on the terminal) sleep 60 目標を達成する方法は?

9
forとbashの検索
ファイルをループする場合、2つの方法があります。 for-loopを使用します。 for f in *; do echo "$f" done 使用find: find * -prune | while read f; do echo "$f" done これらの2つのループが同じファイルのリストを見つけると仮定すると、パフォーマンスと処理におけるこれら2つのオプションの違いは何ですか?


5
パターンの上の行の範囲をsed(またはawk)で削除します
パターンbananaを持つ行とその後の2行を削除する次のコードがあります。 sed '/banana/I,+2 d' file ここまでは順調ですね!しかし、私はそれを前 bananaに2行削除する必要がありますが、「マイナス記号」または何でも取得することはできません(何をgrep -v -B2 banana fileすべきかと同様ですが): teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file sed: invalid option -- '2' teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file sed: -e expression #1, char 16: unexpected `,' teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,2- d' file sed: -e …




5
シェルプロンプトから「はい」のバリエーションを受け入れるより良い方法
私が書いたシェルスクリプトのユーザビリティテストは、答えとして「はい」を期待する質問に答える方法について、人々が異なる期待を持っていることを発見しました。以下のコード例のバリエーションを参照してください。 きっと、私が思いついたものより良い方法があるに違いありませんか?あなたは何で読めると短い形式の本を取るには? read -p 'Answer this question with yes: ' answer if [ "$answer" = 'Y' -o "$answer" = 'YES' -o "$answer" = 'Yes' -o "$answer" = 'y' -o "$answer" = 'yes' -o some-alternate-condition ]; then echo 'Surely this can be written better?' fi

3
「while:;」とはどういう意味ですか?
whileループとは何かを知っています。しかし、私はそれが動作するのを見ました: while [condition] while ![condition] while TRUE (infinite loop) 声明は、後にどこwhileのいずれかである必要がありますTRUEかFALSE。 という名前のシェル組み込みコマンドがあり:ます。それは、何もしないダミーのコマンドとして記述されているが、それはここでは同じである場合、私はそれができたとしても、知りませんTRUEかFALSE。何か違うかもしれませんが、何ですか?

4
if elseステートメントがlogicalおよび&&または||と同等 そして、どこよりもどちらを好むべきですか?
私は意思決定構造について学んでおり、これらのコードに出会いました: if [ -f ./myfile ] then cat ./myfile else cat /home/user/myfile fi [ -f ./myfile ] && cat ./myfile || cat /home/user/myfile 両方とも同じように動作します。ある方法を他の方法から使用する利点はありますか?

1
「#!」の「-」/ bin / sh-” shebang?
#!/ bin / sh- によって解釈されるスクリプトを使用することが推奨されるシバンです(または少なくともそうでした)/bin/sh。 なぜだけでは#! /bin/shないの#!/bin/shですか? それは何の-ためですか?

2
`set -eu`を使用する場合のEXITおよびERRトラップの正しい動作
set -e(errexit)、set -u(nounset)とともにERRおよびEXITトラップを使用すると、奇妙な動作が見られます。それらは関連しているように見えるので、それらを1つの質問に入れるのは合理的です。 1)set -uERRトラップをトリガーしません コード: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} 予期:ERRトラップが呼び出されます。RC!= 0 実際:ERRトラップは呼び出されません、RC == 1 注:set -e結果は変わりません 2)set -euEXITトラップでの終了コードの使用は1ではなく0です コード: #!/bin/bash trap 'echo "EXIT (rc: $?)"' EXIT set -eu echo ${UNSET_VAR} 予期:EXITトラップが呼び出されます、RC == 1 実際:EXITトラップが呼び出され、RC == 0 注:を使用するset +e場合、RC == 1です。他のコマンドがエラーをスローすると、EXITトラップは適切なRCを返します。 編集:このトピックには、使用されているBashバージョンに関連している可能性があることを示唆する興味深いコメントを含むSO投稿があります。このスニペットをBash 4.3.11でテストすると、RC …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.