タグ付けされた質問 「control-flow」

制御フローとは、プログラムまたはスクリプトの実行中にコンピューターコードが実行される順序を指します。例としては、ループ(コードが繰り返される)や、あるブランチが別のブランチの代わりに実行される条件があります。このタグは、ターミナルフロー制御に関する質問ではなく、スクリプトまたはプログラムの制御フローに関する質問に使用します。


3
シェルの制御演算子とリダイレクト演算子は何ですか?
さまざまなコマンドをさまざまなシンボルに接続するチュートリアルをオンラインでよく見ます。例えば: command1 | command2 command1 & command2 command1 || command2 command1 && command2 他の人はコマンドをファイルに接続しているようです: command1 > file1 command1 >> file1 これらは何ですか?彼らは何と呼ばれている?彼らは何をしますか?それらはもっとありますか? この質問に関するメタスレッド。。

6
&&および||の混乱した使用 オペレーター
私は流し読みました/etc/rc.d/init.d/sendmail(私はこれはめったに使用されているけど、私は受験のために勉強しています)ファイル、および私は約少し混乱になった&&と||演算子。次のようなステートメントでそれらを使用できる場所を読みました。 if [ test1 ] && [ test2 ]; then echo "both tests are true" elif [ test1 ] || [ test2 ]; then echo "one test is true" fi ただし、このスクリプトは次のような単一行のステートメントを示します。 [ -z "$SMQUEUE" ] && SMQUEUE="QUEUE" [ -f /usr/sbin/sendmail ] || exit 0 これらは&&and ||演算子を使用してテストに基づいて応答を引き出しているように見えますが、これらの演算子のこの特定の使用に関する説明を掘り下げることはできませんでした。誰もがこれらがこの特定のコンテキストで何をするのか説明できますか?

7
スペースを押して続行します
ユーザーが押すまでbashスクリプトを停止するにはどうすればよいSpaceですか? 私のスクリプトに質問があります スペースを押して続行するか、CTRL+ Cを押して終了します 次に、スクリプトが停止し、Spaceが押されるまで待機します。

2
ファイルの行をループする方法は?
このファイルがあるとしましょう: hello world hello world このプログラム #!/bin/bash for i in $(cat $1); do echo "tester: $i" done 出力 tester: hello tester: world tester: hello tester: world forただし、空白を無視して各行を個別に繰り返したいと思います。つまり、最後の2行を次のように置き換えます。 tester: hello world 引用符for i in "$(cat $1)";を使用iすると、ファイル全体が一度に割り当てられます。何を変更すればよいですか?

3
文字列に部分文字列が含まれているかどうかをテストします
私はコードを持っています file="JetConst_reco_allconst_4j2t.png" if [[ $file == *_gen_* ]]; then echo "True" else echo "False" fi file「gen」が含まれているかどうかをテストします。出力は「False」です。いいね! 問題は、「gen」を変数に置き換えることですtestseq: file="JetConst_reco_allconst_4j2t.png" testseq="gen" if [[ $file == *_$testseq_* ]]; then echo "True" else echo "False" fi これで、出力は「True」になります。どうだった?問題を修正するには?

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


2
「in foo bar…」部分なしの「for」ループをバッシュ
私は最近、私を混乱させたコードを見ていました。コードはこの例になります #!/bin/bash for var; do echo "$var" done コマンドライン引数で実行すると、それらが出力されます $ ./test a b c a b c これは、私にとっては予想外のことです。var未定義のため、なぜこれはエラーにならないのですか?これを「グッドプラクティス」と見なしていますか?

3
2つのファイルの行を並行してループする[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 UnixおよびLinux Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 私が作成しているスクリプトの目的は、2つのシリーズのファイルを比較することです。ファイル名自体は、1行に1つのパスを持つ2つの個別のファイルに保存されます。私のアイデアはwhile read、ファイル名のリストごとに1つずつ、2つのループを作成することですが、2つのループをどのように混在させることができますか? while read compareFile <&3; do if [[ ! $server =~ [^[:space:]] ]] ; then #empty line exception continue fi echo "Comparing file - $compareFile" if diff "$compareFile" _(other file from loop?_) >/dev/null ; then echo Same else echo Different fi done …


2
「if」でタスクをバックグラウンドに送信
どうしてこれなの? if true; then sleep 3 &; fi bash: syntax error near unexpected token `;' 走りたい sleep 3 コマンド["sleep 3"は単なる例]が "paralell"スタイルで実行されるようにバックグラウンドで実行されるため、より速く終了します。しかし、私はこれを手に入れています: bash: syntax error near unexpected token `;' エラーメッセージ。どうして?バックグラウンドにタスクを送信できないのはなぜですか?

2
ファイルを1行ずつ読み取る際のユーザー入力の要求
クラスのispell場合は、whileループ内でユーザー入力を要求してから出力を取得するBashスクリプトを作成する必要があります。これは、ファイルの次の行をユーザー入力として保存するだけです。 whileループでユーザー入力を要求するにはどうすればよいですか? #!/bin/bash #Returns the misspelled words #ispell -l < file #define vars ISPELL_OUTPUT_FILE="output.tmp"; INPUT_FILE=$1 ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE; #echo a new line for give space between command #and the output generated echo ""; while read line; do echo "'$line' is misspelled. Press "Enter" to keep"; read -p …


1
2つのwhileループを実行する最も効率的な方法
現在、2つの異なるwhileループを使用して、ウィンドウマネージャーdwmと、システム情報を出力するステータスバーを起動しています。 現在の私の解決策は、次のように同じスクリプトでそれらを連続して実行することです。 while true; do $HOME/Scripts/dwm-status sleep 2s done & while true; do dwm >/dev/null done 次のように、ネストされたループとして実行されることも確認しましたwhile。 while true; do while true; do $HOME/Scripts/dwm-status sleep 2s done & dwm >/dev/null done 2番目は、CPUスパイクを引き起こすようです。効率性(リソースの最小呼び出しなど)の観点から、これらの2つのループを実行するための最良のアプローチは何ですか?なぜですか?

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