ベストアンサー シェルスクリプトで #!/bin/sh ってどうゆ 2021/08/26 10:21 シェルスクリプトで #!/bin/sh ってどうゆう意味ですか? みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー watanabe04 ベストアンサー率18% (295/1598) 2021/08/26 10:30 回答No.1 これはシェルですよ。という意味です。 質問者 お礼 2021/08/26 10:31 ありがとうございます^_^ 通報する ありがとう 0 カテゴリ [技術者向] コンピューターOS(技術者向け)Solaris系OS 関連するQ&A シェルスクリプトで/bin/awkって何ですか? シェルスクリプトで/bin/awkって何ですか? シェルスクリプトで困っています 2 度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。 シェルスクリプト 引数の引渡しについて こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。 シェル??? スクリプト??? この業界で仕事していていつも首をかしげてしまうことなんですけど、、、 シェルスクリプトのことを単に『シェル』と呼ぶ人がとても多いのですが、この表現はなんだか気持ち悪くありませんか? たとえば、『ちょっとシェル作って』なんて言いますけど、なんかシェル本体(/bin/shそのものとか)を作れといわれてるみたいで変な感じです。 これについて、みなさんどう思われますか? また、なぜこういう言い方が一般化したのでしょうか?(自分の会社だけかと思ってたら、委託さんや協力会社などの同業他社の方も使っているので。。。) くだらない質問ですがよろしくお願いします。 shはシェルなのかコマンドなのか? http://d.hatena.ne.jp/KishikawaKatsumi/20080504/1209922424 で $ sudo sh j2sdk-1_4_2_13-linux-i586-rpm.bin $ sudo rpm -ivh j2sdk-1_4_2_13-linux-i586.rpm と、shと打ち込むと最後の.binが消えますが、shは シェルなのか、それともコマンドなのかどちらなの でしょうか? 手元にあるlinuxの入門書には「shはシェルの一種である」 と記述があります。googleで検索をしてみましたが、 コマンドであるような記述もあり、混乱しております。 また、その入門書には「シェルを切り替えるには、コマンドライン でシェルの名前を入力します。exitコマンドで、元のシェル に戻ります」とあり、その文章の下には実際にshと打ち込んでexit で元に戻る様が書いてあるので実際に試してみました。 [root@localhost ~]# sh sh-3.2# exit exit [root@localhost ~]# この記述のせいでますますわからなくなりました。 なお、最後のbinがシェルスクリプトであることは理解して おります。 ご存じの方、ご教授頂ければ幸いです。何卒宜しくお願い申し 上げます。 シェルスクリプトの作り方 OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。 shのシェルスクリプトの演算方法について・・・ bashのシェルスクリプトについてもお聞きしたのですが、 その方法では演算ができない!ということになってしまいました・・・ こういうちょこっとしたところが違うのが嫌です・・・↓ bashの場合は ---------- bash$ a=1 bash$ a=$(( $a + 1 )) bash$ echo $a 2 ---------- となったのですが、shではエラーが出てしまいました・・・ また、shのスクリプトもbashのスクリプトもシェルスクリプトと呼ぶのでしょうか? シェルスクリプトとmaillogの関係 以下のようなシェルスクリプトを1時間ごとにcronで動かしています。 #!/bin/sh php -f check.php > result exit その結果、/var/log/maillogに、root宛てと思われる記録がシェルスクリプトと同じ1時間ごとに記録されるようになってしまいました。 maillogにその記録を残さないようにするにはどのようにしたらいいのでしょうか。 シェルスクリプトの書き方がおかしいのでしょうか。 よろしくお願いいたします。 シェルスクリプトのシバンを複数指定するにはどうすればいいですか? シェルスクリプトのシバンを複数指定するにはどうすればいいですか? #!/bin/sh #!/usr/bin/expect このように指定しても2行目のインタプリタを使ったスクリプトが動きません。 他に指定方法がありますか? 簡単なシェルスクリプトを見てください。 次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか? linuxシェルスクリプトにつきまして linuxシェルスクリプトにつきまして 下記のシェルスクリプトがあります。 このうちの、 $num `expr 500 + $num` $num $num の部分がわからず、解説いただきたく、お手数をお掛けしますが、何卒よろしくお願いいたします。 #!/bin/sh num=1 while [ $num -le 100 ]; do printf "user%03d,%d,500,User %03d,/home/user%03d,/bin/bash\n" \ $num `expr 500 + $num` $num $num num=`expr $num + 1` done シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕 シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕方が分かりません。 -------------------------------------------------- #!/bin/sh . GetYesNo.sh #外部シェルスクリプトを読み込んで... GetYesNo $1 #このGetYesNoの戻り値は0か1を出力するようにする。 if[ ??? -eq 0 ]; then #"???"の部分に何を入力すれば良いか分かりません。 echo "真(0)です。" else echo "偽(0以外)です。" fi -------------------------------------------------- 戻り値が0か1しか出力しない外部シェルスクリプトを読み込んで、その戻り値をtestコマンドを利用して、0か1のどちらかを判定して、それぞれの出力を出したいけれど、どうやって出来ますでしょうか。 色々な方法を試してみましたが、ダメでした。 上記のコードの書き間違いがあると思いますが、あったらご指摘をお願いします。 sudoでシェルスクリプトを実行させたい /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。 シェルスクリプトで配列が使えない シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、 以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。 環境はubuntu 10.10、 GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu) です。 ---------------------- #!/bin/sh list=(`ls`) echo ${list[0]} ---------------------- 3:Syntax error: "(" unexpected シェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。 以下の単純なシェルスクリプトを実行しようとしています。 ------------------- #!/bin/sh echo ok ------------------- そのとき、 bad interpreter: そのようなファイルやディレクトリはありません と出てしまいます。 ・which sh で確認すると /bin/sh です。 ・Windowsで作ったファイルをFTPのアスキーモードで転送しています。 (ものすごく単純なミスをしてるのかもしれませんが、) よろしくお願いします。 シェルスクリプトの中であるプログラムにシグナルを送りたいとき こんにちわ, 今シェルスクリプトの学習をしています。 シェルスクリプトのなかであるプログラムにSIGINTを送るシェルスクリプトを作るにはどうすればいいでしょうか。 たとえば, ./hogeというCプログラムがあり,その中でsignal関数を用いてSIGINTを捕らえるようなプログラムがなされているとき, シェルスクリプトで #!/bin/sh ./hoge & PID=$$ sleep 2 kill SIGINT $PID だと,$$にはこのシェル自体のPIDが返ってきているので,うまくいきません。 なんとか,./hogeをうごかし,その後何秒かあとにSIGNALを送るようなシェルスクリプトを作りたいのですが,どうすればいいでしょうか。 Cでforkさせて外部呼出しによって送るしかないのでしょうか。 よろしくお願いします。 sh(busybox)のスクリプト お世話になります。 業務でuCLinux上のアプリケーションを開発しているのですが、シェルスクリプトへ引数を渡せなくて困っています。 例えば、a.shの中身が以下のような場合、 --- ここから --- #!/bin/sh echo $1 --- ここまで --- ./a.sh +1とすると、ちゃんと+1が表示されるのですが、 ./a.sh -1とすると、invalid option -- 1となり期待通りの動作(-1表示)ができません。 どうやら、スクリプトの先頭行で指定している/bin/sh(実体はbusybox)が自分自身の引数としてハイフンを横取りしているように見えます。 この症状はバグだと思われますが、回避方法はあるのでしょうか? ご存知の方がいらっしゃればご教示ください。 シェルスクリプト初心者です、以下のシェルを見てくだ お世話になります。 CentOS5にて、ディレクトリ「/home/user」からリモートホスト「192.168.11.200」の「/home/user」へ sshの鍵方式を使い、SCPで画像のコピーを行うシェルスクリプトを書きました。 以下のシェルスクリプトを書いたのですが、3行目の「/usr/bin/scp」が引っかかって 「/home/user/move_img.sh: line 3: `/usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE};'」 とのエラーが出てしまいます。 素人のくせにシェルなんて書くなと言われればそれまでですが、 一体どの記述が悪いのか見当がつきません。 ご教授をお願いいたします。 ------ #!/bin/sh for FILE in `find /home/user -regex ".*\.\(jpg\|png\|gif\|JPG\|GIF\|PNG\)"`; /usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE}; done ------ [シェルスクリプト内で bashコマンド後のコマンドが実行されない] [シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか? シェルスクリプトの1行目に#!を書いてもダメなのはなぜ? test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。 注目のQ&A 「前置詞」が入った曲といえば? 新幹線で駅弁食べますか? ポテチを毎日3袋ずつ食べています。 優しいモラハラの見抜き方ってあるのか モテる女性の特徴は? 口蓋裂と結婚 らくになりたい 喪女の恋愛、結婚 炭酸水の使い道は キリスト教やユダヤ教は、人殺しは地獄行きですか? カテゴリ [技術者向] コンピューター OS(技術者向け) Windows系OSLinux系OSBSD系OSSolaris系OSiOS(技術者向け)Android OS(技術者向け)その他(OS) カテゴリ一覧を見る あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど
お礼
ありがとうございます^_^