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

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

3
bashシェルスクリプトで、文字列値を反復処理するforループを記述する
bashでは、forループ制御変数iが指定された整数を反復するループを書くことができることを知っています。たとえば、1〜10の整数を出力するbashシェルスクリプトを作成できます。 #!/bin/bash for i in {1..10} do echo $i done 文字列のリストを提供する場合、文字列であるループ制御変数を代わりに反復することは可能ですか?たとえばfname、ファイル名を表す文字列があるとします。ファイル名ごとに一連のコマンドを呼び出します。たとえばfname、次のようなコマンドを使用した内容を印刷したい場合があります。 #!/bin/bash for fname in {"a.txt", "b.txt", "c.txt"} do echo $fname done 言い換えると、最初の反復でfnameは値fname="a.txt"を持ち、2番目の反復でfnameは値を持つ、というfname="b.txt"ようになります。残念ながら、上記の構文はまったく正しくないようです。出力を取得したい: a.txt b.txt c.txt しかし、上記のコードを試すと、次の出力が得られます。 {a.txt、 b.txt、 c.txt} 変数の値/内容を繰り返し変更できるように、正しい構文を決定するのを手伝ってもらえますfnameか?お時間をいただきありがとうございます。
24 bash  shell-script  for 

3
Bashでサブシェルを呼び出すためのルールは?
サブシェルを作成するためのBashルールを誤解しているようです。かっこは常に独自のプロセスとして実行されるサブシェルを作成すると考えました。 しかし、これはそうではないようです。コードスニペットA(下記)では、2番目のsleepコマンドは別のシェルで実行されません(pstree別の端末で決定されます)。ただし、コードスニペットBでは、2番目のsleepコマンドは別のシェルで実行されます。スニペットの唯一の違いは、2番目のスニペットが括弧内に2つのコマンドを持っていることです。 誰かがサブシェルを作成するときのルールを説明してもらえますか? コードスニペットA: sleep 5 ( sleep 5 ) コードスニペットB: sleep 5 ( x=1 sleep 5 )

3
ファイル名の改行
防御的な1シェルスクリプトは慎重であり、長期的にはより持続可能であるという前提を理解し、受け入れます。 ここでのテキスト処理の質問に対する回答の多くは、非正統的なファイル名の回答の不測事態に組み込むことにより、この原則に従っています。スペース、ダッシュ、改行が含まれる場合があります。 ファイル名の改行はどの程度普及していますか?具体的には: デフォルトで改行を含むファイル名を作成するアプリケーションはありますか? そのようなファイル名を作成することが望ましい状況はありますか? それとも、主にユーザーエラーのインスタンスですか? [1]シナリオと不測の事態の可能な限り広い範囲の意味の計画と管理... この質問に対する(やや平凡な)コメントに触発された質問。

3
複数の論理演算子、((A || B)&& C)、および「予期しないトークンの近くの構文エラー」
私はBash 3で作業しており、条件式を作成しようとしています。C / C ++では、まったく単純です((A || B) && C)。Bashではそうではありませんでした(Gitの作成者は、他の作業に移る前にこのコードを提供したに違いないと思います)。 これは動作しません。<0 or 1>は文字列リテラルではないことに注意してください。0または1を意味します(通常はから来ますgrep -i)。 A=<0 or 1> B=<0 or 1> C=<0 or 1> if [ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eqe "0" ]; then ... fi 結果: line 322: syntax error …

3
差分、正しいファイルの変更された行のみを表示
私はファイルを持っていますa、bそしてb、それがクローンされたので、それの変更された行を出力したいと思いますa。変更された行のみ、周囲のコンテキスト、差分オフセットマークはありません。 シェルスクリプトを使用してこれを行うにはどうすればよいですか?(Python / Perl / PHP /なし) Sedとawkは許容可能なソリューションです。 今のところ、--suppress-common-linesでdiff -yを行い、正規表現の後方参照を使用してsedを実行し、空白の後の正しい部分を取得します。より良い方法があるはずです? perl(禁止)を使用して、次のようなことをします。 diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 


3
特定のポートがシェルスクリプトからマシンで開いているかどうかを確認し、それに基づいてアクションを実行する方法は?
C ++アプリケーションサーバーがポート8080で実行されているマシンで以下のシェルスクリプトを実行しています。シェルスクリプトでURLを実行し、そのURLからの応答をDATA変数に格納します。 ただし、同じアプリサーバーがダウンしている場合、URLを実行できずRetrying Again、30秒間印刷してスリープしてから同じURLを再度実行するとします。 #!/bin/bash HOSTNAME=$hostname DATA="" RETRY=15 echo $HOSTNAME while [ $RETRY -gt 0 ] do DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat) if [ $? -eq 0 ] then break else echo "Retrying Again" >&2 # restart the server let RETRY-=1 sleep 30 fi done echo "Server is …

4
一定の時間が経過した後にコマンドを実行しますか?
長いプロセスを実行している場合、時間ベースのコマンドを実行する方法はありますか? たとえば、約10分間実行される非常に長いプロセスを実行しています。 5分後、別のコマンドを実行したいと思います。例として、個別のコマンドは次のようになります。echo 5 minutes complete (注:コマンドの完了に向けて進行するのではなく、指定された間隔の後に実行されたコマンドのみが必要です。) 出来ますか?

8
巨大なファイルの先頭と末尾に行を追加します
巨大なファイルの最初と最後に行を追加するシナリオがあります。 以下に示すように試しました。 最初の行の場合: sed -i '1i\'"$FirstLine" $Filename 最後の行: sed -i '$ a\'"$Lastline" $Filename しかし、このコマンドの問題は、ファイルの最初の行を追加し、ファイル全体を走査することです。最後の行については、再びファイル全体を走査し、最後の行を追加します。非常に大きなファイル(14GB)であるため、これには非常に長い時間がかかります。 ファイルを1回だけ読み取りながら、ファイルの先頭と末尾に行を追加するにはどうすればよいですか?

7
2つのタグ間のテキスト
これら2つのタグの間にあるものはすべて<tr> </tr>、HTMLドキュメントから取得したいです。現在、HTMLパーサーを保証する特定のHTML要件はありません。私は単に一致<tr>し</tr>、その間にすべてを取得するものが必要であり、複数trのものが存在する可能性があります。私はawkを試しましたが、それはうまくいきますが、何らかの理由で抽出された各行の複製を与えることになります。 awk ' /<TR/{p=1; s=$0} p && /<\/TR>/{print $0 FS s; s=""; p=0} p' htmlfile> newfile これについてどうやって行くのですか?

1
起動と有効化の両方を行う1つのsystemctlコマンド
1つのコマンドを使用してsystemctl管理対象ソフトウェアを起動および有効化することは、いくつかのスクリプトで数行を節約し、それらをもう少し美的にするのに役立ちます(実際には問題ではなく、持っているのは良いことです)。 1つのそこにあるsystemctlの両方にコマンドstartとenableによって制御されるプログラムはsystemctl?


8
シェルスクリプトでのパスワードの非表示
シェルスクリプトでパスワードを非表示にするにはどうすればよいですか?データベースにアクセスしているスクリプトは多数あります。スクリプトを開くと、他のユーザーもユーザー名とパスワードを認識します。だから誰かが非表示にする方法を知っているなら、私に知らせてください。 私は1つの方法があります:パスワードをファイルに入れて、ファイルを隠し、誰もファイルにアクセスしないようにします(データベースにアクセスする間、権限を変更し、スクリプトでファイルを使用します)。

4
インプレース引数のための複数の表現を使用したsed
を使用してファイル内の複数の単語を置き換えようとしています sed -i #expression1 #expression2 ファイル Something 123 item1 Something 456 item2 Something 768 item3 Something 353 item4 出力(望ましい) anything 123 stuff1 anything 456 stuff2 anything 768 stuff3 anything 353 stuff4 トライアウト sed -iforを2回使用すると、次の出力を取得できます。 sed -i 's/Some/any/g' file sed -i 's/item/stuff/g' file これを単一のインプレースコマンドとして作成する方法はありますか sed -i 's/Some/any/g' -i 's/item/stuff/g' file 上記のコードを試してみたときs/item/stuff/g、ファイルとして取得し、作業を試みます。

6
任意のURLから応答を取得する方法は?
プロジェクトのURLがUP / Workingであるかどうかを確認するために、シェルスクリプトを作成するように求められました。 私はインターネット上でいくつかのヒントを見つけようとしましたが、私が得たのはURLが存在するかどうかをチェックすることです。 私は最初に試しましたwget。 wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^ /' if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is down" fi 私の次の試みはでしたcurl。 curl -ivs https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html# if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is …

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