Top page

shell/スクリプト言語の比較

Windows コマンドプロンプト (cmd.exe) Windows PowerShell Linux/WSL2 (bash)
大文字・小文字は区別しない 大文字・小文字は区別しない 大文字・小文字を区別する
起動: cmd.exe 起動: powershell.exe /usr/bin/bash、/bin/bashなど
パスの指定: 
・ ‘\’で区切る 
・ 先頭 \ はRoot Directory
・ . は Current Directory
・ .. は Parent Directory

ドライブ変更: 
C:> d:

カレントフォルダー表示: 
C:> chdir 

フォルダー変更: 
C:> chdir [フォルダーパス]
C:> cd [フォルダーパス]

フォルダー作成: 
C:> mkdir [フォルダーパス]
C:> md [フォルダーパス]

フォルダー削除: 
C:> rmdir [フォルダーパス]

ファイル削除: 
C:> rmdir [フォルダーパス]

ディレクトリィリスト: 
C:> dir
C:> ls

ファイル内容の表示: 
C:> type [ファイルパス]

環境変数の表示:
C:> set

環境変数の設定:
C:> set [環境変数名]=[値]
例: set PATH=d:\anaconda3;%PATH%

環境変数の表示:
C:> echo %[環境変数名]%

PATH環境変数の表示:
C:> path

実行ファイルの検索
C:> where ...

パスの指定:
・ ‘\’で区切る
・ 先頭 \ はRoot Directory
・ . は Current Directory
・ .. は Parent Directory

ドライブ変更:
C:> d:

カレントフォルダー表示:
C:> chdir

フォルダー変更:
C:> chdir [フォルダーパス] 
C:> cd [フォルダーパス]

フォルダー作成:
C:> mkdir [フォルダーパス] 
C:> md [フォルダーパス]

フォルダー削除:
C:> rmdir [フォルダーパス]

ファイル削除:
C:> rmdir [フォルダーパス]

ディレクトリィリスト:
C:> dir 
C:> ls
  ls: Get-ChildItemのalias 
C:> Get-ChildItem

環境変数の表示:
C:> $ENV:Path 
C:> ls env:

実行ファイル [COMMAND] の場所を探す: 
C:> gcm [COMMAND] 
gcm: Get-Commandのalias

 

パスの指定:
・ ‘/’で区切る
・ 先頭 / はRoot Directory
・ 先頭 ~ はHome Directory
・ . は Current Directory
・ .. は Parent Directory

カレントディレクトリィ表示:
tkamiya> pwd

ディレクトリィ変更: 
tkamiya> cd [ディレクトリィパス]

ディレクトリィ作成: 
tkamiya> md [フォルダーパス]

ディレクトリィ削除: 
tkamiya> rmdir [フォルダーパス]

ファイル削除: 
tkamiya> unlink [フォルダーパス]

ディレクトリィリスト:
tkamiya> ls

ファイル内容の表示: 
tkamiya> cat [ファイルパス]

環境変数の表示: 
tkamiya> printenv

環境変数の設定: 
tkamiya> set [環境変数名]=[値] 例: PATH=~/anaconda3;$PATH

環境変数の表示: 
tkamiya> echo $[環境変数名]

PATH環境変数の表示: 
tkamiya> echo $PATH

実行ファイル [COMMAND] の場所を探す:
tkamiya> which [COMMAND] ...

 

Windows コマンドプロンプト (cmd.exe) Windows PowerShell Linux/WSL2 (bash)
バッチファイル PowerShell bashスクリプト
大文字・小文字は区別しない 大文字・小文字は区別しない 大文字・小文字を区別する

引数:
・ %1, %2, . で参照する.
・ %~1などとすると文字列のクオーテーションを外す.

%0 実行時のコマンド名

%* 引数全て

引数を1つずらす
shift
引数を2つずらす
shift /2

 

引数:
 $1, %2, ... で参照する

$0 実行時のコマンド名

$# 引数の数
$* 引数全て
$@ $*と似ているが、""で囲んだ時の動作が異なる

 

コメント文:
・ 正式には rem を使う
・ 簡単のため、ラベル行指定の : を行頭においてもよい
  コメント文:
・ 行頭が #
継続行: 行末に ^   継続行: 行末に \
エコーバック:
・ コマンドは全てエコーバックされる
・ 先頭文字が @ の場合はエコーバックされない
・ エコーバックを止めるには
echo off
コマンドを使う
例: @echo off

・ 空行の出力
C:> echo.

  エコーバック:
・ コマンドは全てエコーバックされない
・ コンソールに表示する場合は echo を使う

・ 空行の出力
tkamiya> echo

注意: for文、if文の中の環境変数は処理が終了後に格納した値が反映されます (環境変数の即時展開)。
そのため、ブロック文が終了するまで変数が更新されない。
これを防ぐため、遅延環境変数の使用を宣言する。
setlocal enabledelayedexpansion
ブロック文内では !x! を使って変数を展開する

例:
@echo off
setlocal enabledelayedexpansion
for /L %%i in (1,1,3) do (
  set x=%%i
  echo !x!
)

   
変数の参照: %varname%   変数の参照: $varname, ${varname}
     
     
大文字小文字を区別しない:: /i オプション
if /i "aa" == "%1"

if "aa" == "%1"
if not "aa" == "%1"
if var_name < 16
if defined varname
if not defined varname
ファイルの存在確認
if [not] exist file_name

  if [ $# -ne 3 ];
if [ $# -eq 3 ];
if %i% == 1 (
) else (
)
  if [ $a -eq 1 ]; then
...
elif ; then
...
else
...
fi

for文のiterater変数は%%で参照する (%にするとバッチファイル変数と区別できない)
for %%i in (*) do (
)

for /L %%i in (1,1,3) do (
  set x=%%i
  echo %x%
)

 

for i in {1..10};
do
...
done

for((i=0; i<10; ++i));
do
...
done

    while true;
do
...
done