<9> シェルスクリプトを作ってみる

1 ファイルをエディタで作成
mousepad cmd1 # エディタは自由に選んでいい
2 若干の修正
補足:
3 実行可能フラグ

chmod execute

ls -l cmd1
chmod +x cmd1
ls -l cmd1      # 変化を確認
4 パス名を入力して実行

pathとpass path名

    ./cmd1    # これで起動する
              # まだ完全にコマンドっぽくはない


path

5 PATH変数について
env | grep PATH
echo $PATH    # シェルの変数や環境変数は頭に$

(Windowsにも概ね同じ仕組みが使われている。 Windowsでの扱いについては、各自でチェックしておいて下さい。

6 補足説明
  1. PATH変数の意味と使われ方に関して(別ページ)
  2. パーミッションについて(別ページ)
  3. コマンドの実体について


7 自前コマンド用ディレクトリを作る
mkdir ~/bin
PATH=$PATH:~/bin    # この変更は今限りのもので
                    # この先も使うようにさせる方法は あとで述べる
echo $PATH
mv cmd1 ~/bin       # エディタ は一旦終了させておくといい

これからの編集作業は

mousepad ~/bin/cmd1
# または cd ~/bin ; mousepad cmd1
罠の例
8 あらためて実行
# (どのディレクトリにいてもかまわないので)
cmd1 # とだけ叩いて実行 できますよね?
Step1
9 練習課題
10 コマンドの実体を調べる(練習)
  1. PATH変数を分解する

    echo $PATH | sed 's/:/ /g'
  2. それを `` で囲む(コマンド置換)

    forで囲む コマンド置換

  3. 各要素について繰り返す

    for i in `echo $PATH | sed 's/:/ /g'` ; do
      ls $i
    done
  4. (ついでに) この for~doneの出力全体をパイプで

    次段のコマンドに渡すこともできる(右図)。

    or i in `echo $PATH | sed 's/:/ /g'` ; do
      ls $i
    done | wc -l
  5. ディレクトリごとのファイル数

    for i in `echo $PATH | sed 's/:/ /g'` ; do
      echo -n "$i: " ; ls | wc -l
    done
    fileコマンド
  6. それぞれのコマンドが何で作られているか (fileコマンドで確かめる)。

    for i in `echo $PATH | sed 's/:/ /g'` ; do
     file $i/*
    done | less
補足

復習と整理と練習