質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

3回答

797閲覧

windows環境でのスクリプトの書き方

nana_1259

総合スコア7

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2023/10/30 08:52

編集2023/10/30 09:17

実現したいこと

windows環境でスクリプトを動かす。
具体的には、
・スクリプトを実行するユーザーがOracleであることを確認のうえ、実行
∟Oracleユーザーでない場合はエラーコードを出力

・引数の個数をチェックする

・windows環境でも使用できるsed -eコマンドに代わるコマンドがあれば教えていただきたい。(ダウンロード以外で)

前提

Linux環境でバックアップスクリプトを作成しました。それをwindows環境でも使用できるように修正しているのですが、初めてのwindows環境で分からないことが大変多く、いくつか質問させていただきたいです。
バージョンはWindows Server 2016 DAtacenter Evaluationで、コマンドプロンプトからスクリプトを実行しようと思ってます。


・スクリプトを実行するユーザーがOracleであることを確認のうえ、実行
∟Oracleユーザーでない場合はエラーコードを出力

Linux環境では以下のIF文でエラーなく実行できたのですが、windows環境では「whoami の使い方が誤っています。」をエラーが表示されます。こちら調べても当てはまる記事が見当たらなく、windows環境での正しい記載方法をご教示いただきたいです。

if [ `whoami` != "oracle" ] ; then echo "ERROR : Not Run User." exit 1 fi


・引数の個数をチェックする
また、引数にはデータベース一意名を設定しており、後にファイル名などでデータベース一意名を使用するため、
変数"TGTDBUN"(データベース一意名)に引数を挿入したい。
こちら、設定している引数は1つです。Linux環境では以下のようにし、実行できました。

if [ $# -ne 1 ] ; then echo "USAGE : $0 \"DB_UNIQUE_NAME\"" exit 1 else TGTDBUN=$1 fi

windows環境では「$# の使い方が誤っています。」をエラーが出てしまいます。
$#と1をダブルクォーテーション(")で囲むという記事も出てきましたが、試してもダメでした。
こちらもwindows環境での正しい記載方法をご教示いただきたいです。


・windows環境でも使用できるsed -eコマンドに代わるコマンドがあれば教えていただきたい。(ダウンロード以外で)
大変お恥ずかしいのですが、下記Linux環境で使用されているsedコマンドも理解できておらず、もし可能であればこちらもご教示いただきたいです・・

export FNDNAME=`basename ${SHLPATH} | sed -e 's/\.[^\.]*//'`

s/置換したい文字列/置換後文字列/で、最初にマッチした文字列だけ置換するということは理解しましたが、
\.[^\.]*の部分が調べても出てこず、理解に苦しんでおります。

経験が浅く、言葉足らずな部分もあるかもしれませんが、ご教示いただけると幸いでございます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/10/30 09:08

タグに PowerShell が含まれていますが、bash スクリプトを PowerShell で実行しようとしているのでしょうか?
nana_1259

2023/10/30 09:18

お返事ありがとうございます。 可能であれば、コマンドプロンプトからシェルスクリプトを実行したいです。 タグについては失礼いたしました。外しておきました。 ※覚えたての言葉でしたのであまり深く考えずにつけてしまいました。
otn

2023/10/30 09:30 編集

> コマンドプロンプトからシェルスクリプトを実行したいです。 シェルスクリプトを実行すすシェルは、どういう由来のものですか?(どうやってインストールした物か)。あるいは、sh.exeもしくはbash.exeなどの絶対パスでもいいです。 もしかして、「Windowsにはデフォルトではsh.exeもbash.exeも存在しない」ということを把握していないレベルですか?あたりまえですが、シェルスクリプトを実行するためにはシェルが必要です。
nana_1259

2023/10/30 09:36

ご指摘ありがとうございます。 バッチファイルを作成し、コマンドプロンプトから実行してました。 言葉の理解から見直します。失礼しました。
otn

2023/10/30 10:10

バッチファイルとシェルスクリプトが同じだと思っていたと言うことですね。回答に書きました。
melian

2023/10/30 10:31

「ダウンロード以外で」という条件からは外れてしまいますが、BusyBox には bash, whoami, sed コマンドが含まれています。 BusyBox for Windows https://frippery.org/busybox/
nana_1259

2023/10/31 00:55

ありがとうございます。とても参考になります。 BusyBox についても検討したいと思います。
guest

回答3

0

sed -eコマンドに代わるコマンドがあれば教えていただきたい。(ダウンロード以外で)

ダウンロードできないなら諦めてください
とくにwindowsのバッチファイルは複雑な割に使えない代表みたいなシェルなので
環境が拡張できないならバッチで処理するのは無理だと思ったほうがよいでしょう。
おそらくwhoamiで戻ってくるユーザーも想定と違うでしょうし・・・。

参考

bat

1@echo off 2echo START 3for /f "usebackq delims=" %%A in (`whoami`) do set whoami=%%A 4 5if not %whoami% equ oracle ( 6 echo ERROR : Not Run User. 7 exit 1 8) 9echo END

投稿2023/10/30 09:14

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nana_1259

2023/10/30 10:25

ご回答くださりありがとうございます。 とても助かります。 こちらを元に試してみます。
guest

0

ベストアンサー

エラーメッセージからすると、CMD.EXEでシェルスクリプトを動かそうとしているようです。
両者は別の物なので、「英語しか分からない人に日本語で話しかけた」ようなもので、無意味です。

案1:Linuxで動いていたスクリプトをそのまま動かしたいなら、Linuxのツールをインストールします。
Windows環境の中にLinux環境を作るのでなく、Windows環境でLinuxコマンドを動かすにはMicrosoftのWSL1(WSL2じゃなくて)が簡単かと思います。

亜2:追加で何もインストール無しでやるには、「そのスクリプトで何をしたいのか」を明確にして、その目的を果たすバッチスクリプトかPowerShellスクリプトを書きます。「そのスクリプトで何をしたいのか」が把握できていないと無理です。

例えば、Linuxの

sh

1if [ `whoami` != "oracle" ] ; then 2 echo "ERROR : Not Run User." 3 exit 1 4fi

に相当するバッチスクリプト(拡張子BATのファイルで実行するもの)は、

CMD

1if not "%USER%" == "oracle" ( 2 echo ERROR : Not Run User. 3 exit /b 1 4)

です。実行を許したいユーザーのユーザー名が本当にoracleなのかは事前に確認した方が良いでしょうね。echo %USER%で表示して確認します。

sh

1if [ $# -ne 1 ] ; then 2 echo "USAGE : $0 \"DB_UNIQUE_NAME\"" 3 exit 1 4else 5 TGTDBUN=$1 6fi

は、

CMD

1if not "%2"=="" ( %引数が2個以上の場合% 2 echo USAGE : %~nx0 "DB_UNIQUE_NAME" 3 exit /b 1 4) else if "%1"=="" ( %引数が0個の場合% 5 echo USAGE : %~nx0 "DB_UNIQUE_NAME" 6 exit /b 1 7) else ( %引数が1個の場合% 8 set TGTDBUN=%1 9)

投稿2023/10/30 09:55

編集2023/10/30 10:06
otn

総合スコア84572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nana_1259

2023/10/30 10:24

拙い文章にも関わらず、分かり易く教えてくださり大変ありがとうございます。
guest

0

windows環境でbashスクリプトを動かす。

残念ながら、Windowsではbashスクリプトは実行することはできません

投稿2023/10/30 09:05

y_waiwai

総合スコア87778

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問