人に聞けない痔の悩み、これでスッキリ >>

windows7のcmdでシェルスクリプトを実行しようと./ test.shと入力したのですが、操作可能なプログラムまたはパッチファイルとして認識されていませんと返されました。
シェル、というかプログラムは完全初心者で、shファイルの中身も、Hello Worldと表示するだけの、初歩の初歩です。
shを右クリックして、プロパティの設定からアクセスを許可するとネットには書かれていて、そのフォト画像も見ました。しかしプロパティを確認しても、同じような設定画面は見つけられませんでした。
シェルスクリプトを組むのに、何か特殊なソフトやアプリをダウンロードしなければならないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (7件)

そりゃWindowsにシェル(sh/bash/csh/tcshなど)が無いから

    • good
    • 0

Windows 10 Build 14316以降にアップグレードすると2か所ほど設定を変えるだけでWindows上にUbuntu環境がネイティブで構築する事ができます。


普通にファイルを開くようにダブルクリックするだけでシェルスクリプトを実行できます。

http://www.forest.impress.co.jp/docs/news/201604 …
    • good
    • 1

No.4です。


以下間違いました、失礼。

× 2-2 busybox.exe -sh -l[Enter] 
○ 2-2 busybox.exe sh -l[Enter]
    • good
    • 0

busyboxの簡単な使用方法が↓で解説されています。



http://qiita.com/tetsuy/items/22cba0bc2048967b270a


1. ダウンロード
http://frippery.org/busybox/
の下の方の「The latest version is always busybox.exe.」のリンクから取得

2.起動
ダウンロードしたフォルダを、C:\Users\○○\Downloads(デフォルトのダウンロードフォルダ) とすると

スタートメニューからコマンドプロンプトを起動して以下を入力
2-1 cd C:\Users\○○\Downloads[Enter]   cdコマンドで、ダウンロードフォルダへ移動
2-2 busybox.exe -sh -l[Enter]        busyboxを起動(最後の文字は"エル"です)
  → プロンプト表示が変わります。

2-3 busybox上で、cdコマンドで、test.shのあるフォルダへ移動
2-4 ./test.sh[Enter]             シェルスクリプトの実行(スペースは入れないで下さい)
    • good
    • 1

いろいろと誤解があるようなので。



./ test.sh ではなく、 ./test.sh でしょう。
これはcmd では .\test.bat に相当するコマンドです。

cmd で .\test.bat と入力すると、 cmd が カレントディレクトリにある ファイル test.bat の中身を解釈してバッチファイルが実行されます。
同様に、 Unixのシェルで ./test.sh と入力すると、 シェルが カレントディレクトリにあるファイル test.sh の中身を解釈して、シェルスクリプトが実行されます。

逆に、Unixのシェルで .\test.bat としても \ はディレクトリの区切りではないし、/に直したところでcmdとはまったく違うので test.batをうまく解釈できません。
同様に、 cmd で ./test.sh としても / はディレクトリの区切りではないし、\に直しても test.sh を解釈するシェルが無いので、正しく解釈できません。


Windowsで動かすには、次のような方法があります。
・Cygwin,MinGW,busybox等の、Unix系のシェルを使える環境で実行する。
・VirtualBox等の仮想マシンを使ってLinux環境を作る
・シェルスクリプトの内容を、Windowsで実行できるプログラムに移植する(VBS,バッチファイル, Perl,Python 等)
    • good
    • 0

Winならバッチ(bat)ファイルか、wshでやってみては?

    • good
    • 0

そのままのコマンドプロンプトではUnixコマンドは使えませんので、busyboxなどを利用してください

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWINDOWSでシェルプログラムを実行する方法

こんにちは。
WINDOWS上で自分で作成したシェルプログラムを実行したいです。
シェルプログラムを動かす方法は何かありますでしょうか?
(WINDOWSに何かソフトを入れるとシェルは動くようになるのでしょうか?)

よろしくお願い致します。

Aベストアンサー

>WINDOWS上で自分で作成したシェルプログラムを実行したいです。
何のシェルかを補足にどうぞ。

・bash シェル
・Windows PowerShell
・あるいは Explorer のような GUI のもの

などなど。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

QシェルからJavaを起動したい

シェルからJavaを起動したい
上記ですけど、Linuxで毎回「java パッケージ名.クラス名」を打つのは面倒なので、
シェルスクリプトのファイルを作って、それを実行するだけで起動できるようにしようと思っています。
が、クラスが見つからないってエラーが出て実行できませんでした。
(「java パッケージ名.クラス名」を実行しているディレクトリにシェルを作ってます)
恐らく環境変数などの設定がシェルの中にいるのではないかと思いますが、
シェルスクリプトとかLinuxの環境には疎い為、どういった記述が必要なのか解りません。
どなたか例を提示して頂けないでしょうか?

ちなみに、一般的なJavaの環境変数や、
プロジェクト特有・jarファイル等の環境変数は設定済みです。


それから、シェルは以下のように記述してます。

#!/bin/sh
java パッケージ名.クラス名


よろしくお願いします。

Aベストアンサー

状況が明確でないので可能性の一つというだけで役に立たないかもしれないが、
そのシェルスクリプトが存在しているディレクトリをカレントディレクトリにして、

java パッケージ名.クラス名

をコマンドラインで直接打てば動作しており、
また、そのカレントディレクトリでスクリプトを実行した場合にも実行できるが、
他のディレクトリからスクリプトを実行した場合にはクラスが見つからないというエラーになるという状況なら、
クラスパスにそのJavaクラスファイル(のトップ階層)へのパスを追加するか、
スクリプト内でカレントディレクトリを変更するかする必要がある。

例えばディレクトリ構成が、

/a/b/c/シェルスクリプトファイル
/a/b/c/パッケージ名/クラス名.class

になっていて、/a/b/cをカレントディレクトリにして、

java パッケージ名.クラス名

で直接実行したり、シェルスクリプトを起動した場合は実行できて、
他のディレクトリをカレントディレクトリにして実行権限をつけたシェルスクリプトを

/a/b/c/シェルスクリプト

/a/b/c を検索パスに追加しているならシェルスクリプト名だけ

で実行しようとした時にクラスが見つからない場合は、

#!/bin/sh
java -cp /a/b/c パッケージ名.クラス名

のように/a/b/cをクラスパスに指定する。
他にもクラスパスを設定しているならそれも込みでクラスパスを設定する。
スクリプトが置かれているディレクトリがスクリプト実行時のカレントディレクトリに勝手になるわけではない。

もしくは、Javaプログラムの実行中のカレントディレクトリが、
スクリプトが置かれているディレクトリであることを前提にプログラムが作られていたりするのなら(そうでない場合でもいいが)、
javaコマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。

状況が明確でないので可能性の一つというだけで役に立たないかもしれないが、
そのシェルスクリプトが存在しているディレクトリをカレントディレクトリにして、

java パッケージ名.クラス名

をコマンドラインで直接打てば動作しており、
また、そのカレントディレクトリでスクリプトを実行した場合にも実行できるが、
他のディレクトリからスクリプトを実行した場合にはクラスが見つからないというエラーになるという状況なら、
クラスパスにそのJavaクラスファイル(のトップ階層)へのパスを追加するか、
スク...続きを読む

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング