基本課題 ex01-0.txt

Visual Studio Code などのテキストエディタを用いて、

  1. 学籍番号
  2. 日本語氏名

を含む適当な自己紹介文をテキストファイル ex01-0.txt として作成し、kiso2 コマンドを用いて提出しなさい。

演習課題 ex01-1.sh

次のtree コマンドの実行例は、カレントディレクトリが ~/kiso2-2018 であるときのターミナル上での出力例である。

t180900@s01cd0542-160:~/kiso2-2018$ tree exdir
exdir/
├── dir0
├── dir1
├── dirA
│   ├── dirAa
│   └── dirAb
│       ├── dir0
│       ├── dir1
│       └── dir2
└── dirB
    └── dirA
        ├── dirAa
        └── dirAb
            ├── dir0
            ├── dir1
            └── dir2

15 directories, 0 files

このようなディレクトリ構造を作成するために必要となるシェルコマンドを、テキストファイル ex01-1.sh に入力・保存し、kiso2 コマンドを用いて提出しなさい。 ただし、最初のカレントディレクトリがホームディレクトリであることを仮定してよい。

また、ex01-1.shに入力するシェルコマンドは、コマンドごとに改行し、1行に1つのコマンドのみが入力されるものとする。

たとえば、ホームディレクトリから

  1. ディレクトリ exdir を作成し、
  2. 続いて exdir に移動、
  3. さらにディレクトリ dir0 を作成

する場合、ex01-1.sh は次のような内容となる。

mkdir kiso2-2018/exdir
cd kiso2-2018/exdir
mkdir dir0
 :

演習課題 ex01-2.txt

/etc/texmf ディレクトリを、~/kiso2-2018/texmf (ホームディレクトリの下の、kiso2-2018 ディレクトリの下の、texmf ディレクトリ)に、コピー元のディレクトリの構造を保ったまま全てコピーしなさい。

コピー後に tree コマンド

t180900@s01cd0542-160:~$ tree ~/kiso2-2018/texmf

の出力結果をテキストファイル ex01-2.txt に保存し、kiso2 コマンドを用いて提出しなさい。

コピー後の tree コマンドの出力例は以下の通りである(出力結果は途中が省略されています)。

t180900@s01cd0542-160:~/kiso2-2018 $ tree ~/kiso2-2018/texmf
/home/t180900/kiso2-2018/texmf
├── dvipdfmx
├── dvips
│   └── config
├── fmt.d
│   ├── 00tex.cnf
│   ├── 10texlive-base.cnf
│   ├── 10texlive-lang-cjk.cnf
│   ├── 10texlive-lang-cyrillic.cnf
	:
├── texmf.d
│   ├── 00debian.cnf
│   └── 96JadeTeX.cnf
└── web2c
    ├── mktex.cnf
    └── texmf.cnf

11 directories, 31 files
ディレクトリを、その下にあるファイルを含めて全てコピーしたい場合は、ファイルをコピーするコマンドcp のオプション cp -r を利用することができます。 使い方は、“シェル ディレクトリ コピー” などのキーワードで調べてみましょう。
シェル上で、あるディレクトリにあるすべてのファイルを表現するためには * (アスタリスク、ほし) を使うことができます。 たとえば、rm * はカレントディレクトリにあるすべてのファイルが消去されます。cp * dir は、カレントディレクトリにあるすべてのファイルが dir ディレクトリにコピーされます。

また、* 記号はコマンドの一部に使うこともできます。たとえば、ls *.c というコマンドは、カレントディレクトリにあるファイル名が「.c」で終わるすべてのファイルが表示されます。

演習課題 ex01-3.txt

ターミナルを用いて、次の文章が表すディレクトリとファイルを作成しなさい。

ホームディレクトリの下に kiso2-2018 ディレクトリが存在し、その kiso2-2018 ディレクトリに下には2つのディレクトリ ex00 と ex01 のみが存在している。
ex00 ディレクトリの下には、foo という名前のテキストファイルが1つだけ存在し、foo の内容(中身)は /etc/lsb-release というファイルと同じである。
ex01 ディレクトリの下には、ファイルやディレクトリは存在しない。

これらを作成した後に、カレントディレクトリを ~/kiso2-2018 に移動し(pwd コマンドを実行したときに/home/自分の学籍番号/kiso2-2018/と表示される状態で) 以下の2つのコマンドを実行しなさい。

t180900@s01cd0542-160:~/kiso2-2018$ cat ex00/foo
	:
  (実行結果)
t180900@s01cd0542-160:~/kiso2-2018$ tree
	:
  (実行結果)

これらのコマンドで表示された内容をテキストファイル ex01-3.txt に保存し、kiso2 コマンドを用いて提出しなさい。 ただし、プロンプトや入力したコマンドの表記については、提出するテキストファイルの内容に含んでも、含まなくてもどちらでもよい。

この課題では、「kiso2-2018 ディレクトリに下には2つのディレクトリ ex00 と ex01 『のみ』が存在している」と指示されています。 演習課題 ex01-1.sh や ex02-2.txt を実行した場合、~/kiso2-2018 ディレクトリの下にはすでに幾つかのファイルやディレクトリが作成されているかもしれません。 そのような場合は、それらのファイルやディレクトリを消去して、この課題の指示通りのディレクトリ構成となるようにして下さい。

演習課題 ex01-4.sh

演習課題 ex01-1.sh では、演習内容を実現する複数のシェルコマンドを一行ずつ並べたテキストファイルex01-1.shを作成した。 このように、シェルコマンドを実行する順番に記述したテキストファイルはシェルスクリプト と呼ばれ、ブログラムとして実行することができる。 (中身はただのテキストファイルだが、文章ファイルなどと区別するためにファイル名には慣習的に .shというファイル拡張子が使われる。)

たとえば、以下のような内容のテキストファイルex01-4-sample.shは、

ex01-4-sample.sh
mkdir ~/kiso2-2018/ex01-sample
echo "~/kiso2-2018/ex01-sample を作成しました。"
 
cp /etc/services ~/kiso2-2018/ex01-sample/.
echo "~/kiso2-2018/ex01-sample に /etc/services をコピーしました。"

次のようにbashというコマンド(シェル実行ファイル)を使って実行することができ、ファイルに書かれた順番にそれらのシェルコマンドが実行される。

t180900@s01cd0542-160:~/kiso2-2018$ tree
.
└── ex01-4-sample.sh

0 directories, 1 file
t180900@s01cd0542-160:~/kiso2-2018$ bash ex01-4-sample.sh
~/kiso2-2018/ex01-sample を作成しました。
~/kiso2-2018/ex01-sample に /etc/services をコピーしました。
t180900@s01cd0542-160:~/kiso2-2018$ tree
.
├── ex01-4-sample.sh
└── ex01-sample
    └── services

1 directory, 2 files

さて、このようなシェルスクリプトとして、適当なディレクトリ名を与えると自動的に ~/kiso2-2018/ ディレクトリの下に与えられた名前のディレクトリを作成するシェルスクリプト ex01-4.shを作成したい。たとえば、以下のようにファイル名の後ろに ex02 という名前を与えて実行すると、ex01-4.shは、

t180900@s01cd0542-160:~/kiso2-2018$ tree
.
├── ex01-4-sample.sh
└── ex01-sample
    └── services

1 directory, 2 files
t180900@s01cd0542-160:~/kiso2-2018$ bash ex01-4.sh ex02
~/kiso2-2018/ex02 を作成しました。
t180900@s01cd0542-160:~/kiso2-2018$ tree
.
├── ex01-4-sample.sh
├── ex01-sample
│   └── services
└── ex02

2 directories, 2 files

のようなメッセージとともに新しいディレクトリ ~/kiso2-2018/ex02 を作成する。

このようなシェルスクリプト ex01-4.sh を作成し、kiso2コマンドを用いて提出しなさい。

実行例 bash ex01-4.sh ex02 での ex02 のように、シェルスクリプトなどのプログラム実行時にコマンドの後ろに空白で区切られて与えられる文字列をコマンドラインオプションと呼ぶ。 たとえば、removeme.txt というファイルを削除するためのコマンド rm removeme.txt では、removeme.txt が rm コマンドのコマンドラインオプションである。

このようなコマンドラインオプションで指定された文字列をシェルスクリプトの中で利用する場合、$1 のような特殊な変数によってコマンドラインオプションの文字列を使うことができる。

たとえば、次のようなecho コマンド1行だけからなるシェルスクリプトは、

option.sh
echo $1

次のように実行される。

t180900@s01cd0542-160:~/kiso2-2018$ bash option.sh Hello
Hello
t180900@s01cd0542-160:~/kiso2-2018$ bash option.sh あいうえお
あいうえお

もちろん、$2, $3 も、さらには $0 もある。 これらの変数がどのように働くのか、自分で調べて実験してみて下さい。

  • lecture/kiso2/ex01.txt
  • 最終更新: 2018/09/21 21:30
  • by sano