シェルスクリプトをパワーシェルスクリプトに変換する方法とは?

このQ&Aのポイント
  • UNIXで運用しているシェルスクリプトをマイクロソフトのパワーシェルで動作するように変換したいですが、perlプログラムを起動している箇所の扱い方が分かりません。
  • /usr/local/ap/phone_book/edit_ms008.pl ms008.datを実行し、結果をld_ms008.txtとして出力するという処理をしています。
  • 質問にご存知の方、シェルスクリプトをパワーシェルスクリプトに変換する方法やperlプログラムを起動する方法などの情報を教えていただけると助かります。
回答を見る
  • ベストアンサー

シェルスクリプトとパワーシェルスクリプトに変換したい

UNIXで運用しているシェルスクリプトをマイクロソフトのパワーシェルで動作するようなシェルに書き換えたいのですが、下記のようなperlプログラムを起動している箇所はどのように扱えばよいのでしょうか。 /usr/local/ap/phone_book/edit_ms008.pl ms008.dat > ld_ms008.txt if [ $? -ne 0 ] then echo "abnormal terminated!\n" exit1 fi 「ms008.dat」をインプットにして「edit_ms008.pl」を実行して、 「ld_ms008.txt」をアウトプットするというものです。 どなたかご存知の方、ご教示よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

パワーシェルですか?これだとバッチの方が簡単です。下記を拡張子CMDかBATのファイルにして実行します。 \perlのパス\perl \スクリプトのパス\edit_ms008.pl ms008.dat > ld_ms008.txt if errorlevel 1 ( echo "abnormal terminated!" exit /b 1 )

nishiyan
質問者

お礼

notnot様 回答して頂いた内容で実行したところうまく実行できました。 パワーシェルではなくバッチコマンドで対応しようと思います。 どうもありがとうございました。

関連するQ&A

  • クオータの設定とシェル編集について

    よろしくお願いします。 ●クオータ設定   MacOSXserver(FreeBSD) ー ADサーバ   の環境で、共有フォルダをMac側に   設定しています。アクセスするユーザは   ADのユーザです。   この時、ADユーザ数が5ユーザとして   1ユーザに対して4Gのディスククオータを   設定するスクリプトを作成しました。   が、上手く行きません。   【plファイル】 #!/usr/bin/perl open(IN,"/Users/admin/Desktop/userlist.txt"); @USER=<IN>; foreach (@USER) { system("edquota -p ppp -u $_ "); }   【ユーザリストファイル】 ppp 11111 22222 33333 44444   pppユーザを基準ユーザとして4G設定   しています。それを他のユーザに反映   させるスクリプト・・・のハズなのですが・・ どこがおかしいのでしょうか? ●シェル編集   シェルの編集の仕方について教えて下さい。   さっぱり分からないのですが、   0)シェルって何ですか?   1)編集する事でどのようなメリットが     あるのでしょうか?   2)bash, csh, sh, zsh・・の違い   3)viで編集すると仮定して、     > vi ・・・     何と入力すれば良いのでしょうか?     つまり「シェル」ってどこに     あるのですか? よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • POSTメソッドで取得したデータをシェルスクリプトCGI経由でJava

    POSTメソッドで取得したデータをシェルスクリプトCGI経由でJava実行時の引数に渡す方法 HTML中級、Java、Unix系のシェルスクリプトに関して初級程度の知識があります。 Javaで書かれたプログラムを用いた、ブラウザ上で動作する CGIによるサーバサイド・アプリケーションを作ろうとしています。  http://d.hatena.ne.jp/shin/20090118/p1  http://d.hatena.ne.jp/Bayside/20050915  http://www.cs.adfa.edu.au/~gfreeman/CGIRequest.html 等のサイトを参考に、シェルスクリプトを用いたCGIを経由して サーバ上でJavaを実行し、その出力結果(シェルのechoやJavaのSystem.out.printlnによる) をHTMLとして受け取り、ブラウザ上で表示する所までうまくいきました。 上記のCGIに宛てて、別のHTML上の入力フォームからPOSTメソッドで文字列のデータを送信し、 その値をJavaに引数として渡してやりたいと考えています。  http://ameblo.jp/new3bon/entry-10210338319.html  http://waitwg.org/~pc-qa/?CMD=DCNT&CID=8 等から、POSTで送られたデータはシェルスクリプト上の標準入力に格納されると分かり、 #!/bin/bash echo cat cat >> ./ttt.txt URLエンコードされたパラメータを上記コードで表示させることまではできました。 また、コマンドラインからJavaを実行する際の引数は  http://www.02.246.ne.jp/~torutk/javahow2/commandline.html Java側のmainメソッドの引数として受け取れることは分かりました。 これらの方法を組み合わせて、CGIとしてJavaプログラムが実行される際に HTML上のフォームからPOSTメソッドで送信されたデータを渡してやりたいと考えています。 その際、シェルの標準入力に与えられたデータをシェルの変数に格納してやるか、  http://www.atmarkit.co.jp/flinux/rensai/shell03/shellstio.html に示されている標準入出力のすり替えを用いる等の方法ができないかと考えているのですが、 シェルスクリプトやJava上のどの段階で、どのようなコードを書けばいいのか分からずにいます。 (下記コードでは、各種パスを通す際に標準入出力の中身が書き換えられる前らしいと見当はついているのですが……) 複数の要素が込み入って複雑なことになっていますが、 解決方法をご存知の方がおられましたら、ご教唆のほど願います。 下に書きかけのシェルスクリプトのコードを書いておきます。 #!/bin/sh JAVA_HOME=/usr/java/jdk1.6.0_20 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/mysql-connector-java-5.1.12-bin.jar export JAVA_HOME PATH CLASSPATH /usr/java/jdk1.6.0_20/bin/java \  (中略) Main

  • UNIX形式のテキストファイルをDOS形式に変換する(cshで実行したい)

    UNIX形式のテキストファイルをDOS形式に変換するというbash以下のシェルをcshで書き換えたいのですが、どうすればよいでしょうか #!/bin/bash # u2d.bash set infname = "$1" set outfnname = "$2" cat "${infname}" | sed "s/$/`echo -ne '\015'`\" | iconv -f EUCJP -MS -t CP932 > "${outfname}" 出展:linuxWorld (株)IDGジャパン発行 1月号 P53

  • Unix初心者による初心者シェルプログラミングです。

    Unix初心者による初心者シェルプログラミングです。 以下のようなコマンドを羅列しただけの スクリプトが300行(実質100行ぐらい)が漸くできるようになりました。 これだけで、おばかさんな私は進化してます。が・・・ 対象となる、hoge.txtは、同ディレクトリ内に別名で、200ファイル有ります。 このスクリプトがその別名、200ファイルへと対象になります。 と云う事はファイル名分の200ファイル分スクリプトを編集して用意しなくては いけなくなる。 となると・・・ 別の事をしないといけませんよね。 どうやら、同ディレクトリ内にある、全ての .txt ファイルに対してこの スクリプトを実行させるには・・・ (よくわかりませんが・・・) FILE=`/home/foo/*.txt` みたいな・・・(全然違うと思っていますが、イメージで) /home/foo/ 内の .txt ファイルを一ファイルずつ読み込んで、実行させる方法が あると思うのですが・・・ 全てを教えて貰うつもりはありません。 学習していきます。 でも、疲れてきました。 がしかし、やらなくちゃいけません。 ヒント下さい。 お願いします! > cat hogehoge.sh #!/usr/bin/sh DAY=`/usr/xpg4/bin/date '+%Y/%m/%d%a'` HUMAN=`/usr/ucb/whoami` TIME=`/usr/xpg4/bin/date '+%H:%M:%S'` echo echo "$DAY : $HUMAN : PID $$" echo echo "$0" echo echo "$TIME Let's start!" echo echo "ls -l /home/foo/hoge.txt" ls -l /home/foo/hoge.txt echo echo "cat -n /home/foo/hoge.txt | head -15" cat -n /home/foo/hoge.txt | head -15 echo echo "sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt" sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo echo "cat -n /home/foo/new-hoge.txt | head -18" cat -n /home/foo/new-hoge.txt | head -18 echo echo "sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt" sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt echo echo "ls -l /home/foo/renewal-hoge.txt" ls -l /home/foo/renewal-hoge.txt echo echo "diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt" diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt echo echo "sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt" sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo ・ ・ ・ ・ ・ ・ ・ ・ 300

  • crontabの設定について

    某サイトを参考にIPアドレスの自動アップデート スクリプトを作成しました。 OSはCentOS6.2です。 その後、crontab -e を実行(中は空で何も記入されていませんでした)しました。 本来vi /etc/crontab で編集するのかなと思ったのですが、以前使用していたvinelinuxのcrontabと表示形式が違っていたので、何も書き込んでいません。 crontab -e 実行後、下記内容を貼り付け保存しました。MAIL TO は空欄たったのですが、スクリプトが正常に実行されているかメールで受信したいため、下記設定をしました。すると確かにメールは10間隔で届くのですが、内容は下記エラーです。 エラー内容 /bin/bash: root: command not found crontab 設定内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO={ローカルドメイン内のメールアドレス記載} HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly # DDNS */10 * * * * root perl /usr/ddns/ipchk.pl 00 5 * * 0 root rm -f /usr/ddns/CRT_IP.dat スクリプトの内容は下記のとおりです。スクリプトの中にwgetコマンドがあるのですが、centos6.2ではwgetが最初から入っていました。念のためyum -y install wget を実行したところすでにインストール済みの表示が出ました。(command not found と言うエラーからwgetが実行されないのかな、と勝手に思った次第です) #!/usr/local/bin/perl (which perl 実行結果 /usr/local/bin/perl と表示がでたのでそれに従いました) # $CRT_IPF = '/usr/ddns/CRT_IP.dat'; $NEW_IPF = '/usr/ddns/NEW_IP.dat'; $LOG = '/var/log/ddns.log'; open INPUT,"$CRT_IPF"; $CRT_IP=<INPUT>; close INPUT; system("/usr/local/bin/wget -q -O $NEW_IPF {ここには REMOTE_ADDR:の結果が取得できる登録済みDDNSのアドレス記入}"); open(INPUT,$NEW_IPF); $c = <INPUT>; $stp = index($c,"REMOTE_ADDR:")+12; $edp = length($c); $NEW_IP = substr($c,$stp,($edp-$stp)); close(INPUT); if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) { open (OUTPUT ,">$CRT_IPF"); print OUTPUT $NEW_IP; close OUTPUT; print "IP Address update: $CRT_IP to $NEW_IP\n"; system("/usr/bin/wget -q -O - '{DDNSのIP更新サイトのアドレス記載 &ドメイン&pw=パスワード}'"); $now_string = localtime; open (OUTPUT ,">>$LOG"); print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n"; close OUTPUT; } 何がいけないのでしょうか。よろしくお願いします。

  • 外部ファイルを使用するシェルの作成について

    こんにちわ。プログラミングど素人のpcunixと申します。 これまで直接シェルの中身を編集していましたが、今後利用回数が増えたことから、編集していた箇所を外部ファイル(txtでもcsvでも何でも良い)へ書き込んでおき、その内容を取り込みたいと考えております。 「今まで使用していたシェル」 #!/bin/sh echo start `date` DK_LOG_DIR=./log DK_USR=dkggapp01 DK_PWD=dkggapp01 DK_SID=${ORACLE_SID} DK_OUT_FILE=dk_grp_insert.txt sqlplus -s ${DK_USR}/${DK_PWD}@${DK_SID} << EOF > ${DK_LOG_DIR}/${DK_OUT_FILE} whenever sqlerror exit sql.sqlcode insert into DKZT_GRP ( ******************************* GRP_CD , GRP_MEI_KNJ , GRP_MEI_KNA , GRP_RYS_KNJ , GRP_RYS_KNA , GRP_KNR_KBN_CD , GRP_HJI_KHI_FLG , GRP_HJI_JNJ , BSO_CD , RRI_DEL_FLG , ******************************1 DB_RGS , DB_TRK_D , DB_TRK_JKK , DB_KSS , DB_KSN_D , DB_KSN_JKK, DB_TMP , DB_KSN_GAM_ID ) values ( ******************************* '0123456', '東京センター', 'トウキョウセンター', '営業G', 'エイギョウ', '1', '1', '', '000', '0', ******************************2 'rinji', to_char(systimestamp, 'yyyymmdd'), to_char(systimestamp, 'hh24miss'), 'rinji', to_char(systimestamp, 'yyyymmdd'), to_char(systimestamp, 'hh24miss'), to_char(systimestamp, 'yyyymmddhh24missff3'), 'DK9999B9001' ) ; commit; exit; EOF # 終了判定 DK_RET=$? if [ ${DK_RET} -ne 0 ] then echo 異常終了 ステータス=${DK_RET} exit ${DK_RET} fi echo finish `date` exit ${DK_RET} ***2の部分を外部ファイルに書き込んでおき ***1へ代入するにはどうすれば良いでしょうか? 何を書いたらよいのかわからないので全て書いたつもりですが 足りない情報があったらご指摘いただけますと幸いです。 よろしくお願いいたします。

  • シェルスクリプト

    while文のシェルスクリプトでエラーが出て困っています。 どうすればいいでしょうか? 回答の程宜しくお願い致します。 #!/bin/bash count=1 while[$count -le 5] do touch "y$count" ls -l "y$count" coun ='expr $count+1' done [root@Linux root]# . makefile bash: while[1 -le 5]: command not found bash: makefile: line 4: syntax error near unexpected token `do' bash: makefile: line 4: `do'

  • シェルスクリプト

    こんばんわ。最近Tru64でシェルスクリプトを書いています。そこで質問ですが、 前の実行コマンドが正常に終了したら次のコマンドが実行されるスクリプトはどのように書けばよいのでしょうか? if文で可能なのでしょうか? またkillコマンドをawkで kill psID OK?(y/n) と表示させyを押せばkillするようにするにはどのようにすればよいですか? 例のように表示させることはawkでできるのですがどうしたらy入力後killできるのかわかりません。 これもif文を使わなければだめなのでしょうか? よろしくお願いします。

  • シェルスクリプトについて

    初心者なので、あまり理解していませんが、 シェルスクリプトからCOBOLソースをCALLして、 COBOLでのリターン値を取得したいのですが、 一度に複数のリターン値を取得できるのでしょうか?

  • シェルスクリプトについて

    RedHat Linux v.7.1を常時接続で稼働しています。問題はコンピュータから長期に離れるときは携帯で時々アクセスして作動を確認しています。 どなたか、このサーバが止まったら自分の携帯にメールを送るとか、他のマシーンから時々Pingを打って作動を確認し、pingが返らないときは携帯にメールを送るようなshellスクリプトが在りましたら教えてください。 あるいは参考資料の在る場所など教えていただけませんでしょうか。 プログラムの経験は在りません。

専門家に質問してみよう