今回はシェルスクリプトで引数を利用してファイルの変更を実施するスクリプトを作ってみます。
コマンド実行時に引数を2つ与えて1つ目を指定したファイル2つ目を変更するファイルにするスクリプトを作成します。
質問して入力された2つのファイルを作成するスクリプト
ファイルを変更スクリプトを作成
コマンド実行時に引数を2つ入力し、1つ目の引数として入力したファイルの名称を2つ目の引数名に変更するスクリプトを作成する。
また、引数が2つ以外の場合はコマンドの使い方を表示するようにする。
スクリプト作成
vi 3test.sh #!/bin/sh if [ $# -eq 2 ] then mv $1 $2 else echo "使い方:rename.sh 元ファイル 変更ファイル名" fi
それでは以下で実行
[root@t-bobo011 ~]# ll 合計 112 -rw-r--r--. 1 root root 101 8月 29 16:09 2013 2renshu.sh -rw-r--r--. 1 root root 167 8月 29 16:22 2013 2test-1.sh -rw-r--r--. 1 root root 114 8月 29 18:41 2013 3test.sh -rw-------. 1 root root 1515 8月 6 05:56 2013 anaconda-ks.cfg -rw-r--r--. 1 root root 68568 8月 6 05:56 2013 install.log -rw-r--r--. 1 root root 10721 8月 6 05:54 2013 install.log.syslog -rw-r--r--. 1 root root 0 8月 29 18:42 2013 kkk -rw-r--r--. 1 root root 0 8月 29 16:32 2013 script_test -rwxrwxrwx. 1 root root 96 8月 22 19:14 2013 test-1 -rw-r--r--. 1 root root 185 8月 22 19:23 2013 test-2 -rw-r--r--. 1 root root 135 8月 23 09:33 2013 test-3.sh -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test1 -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test2 -rw-r--r--. 1 root root 0 8月 29 18:42 2013 yyy
kkk→kkk-2へ変更、yyy→yyy-2へ変更する。
[root@TEST ~]# sh 3test.sh kkk kkk-2 [root@TEST ~]# ll 合計 112 -rw-r--r--. 1 root root 101 8月 29 16:09 2013 2renshu.sh -rw-r--r--. 1 root root 167 8月 29 16:22 2013 2test-1.sh -rw-r--r--. 1 root root 114 8月 29 18:41 2013 3test.sh -rw-------. 1 root root 1515 8月 6 05:56 2013 anaconda-ks.cfg -rw-r--r--. 1 root root 68568 8月 6 05:56 2013 install.log -rw-r--r--. 1 root root 10721 8月 6 05:54 2013 install.log.syslog -rw-r--r--. 1 root root 0 8月 29 18:42 2013 kkk-2 -rw-r--r--. 1 root root 0 8月 29 16:32 2013 script_test -rwxrwxrwx. 1 root root 96 8月 22 19:14 2013 test-1 -rw-r--r--. 1 root root 185 8月 22 19:23 2013 test-2 -rw-r--r--. 1 root root 135 8月 23 09:33 2013 test-3.sh -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test1 -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test2 -rw-r--r--. 1 root root 0 8月 29 18:42 2013 yyy
→kkk→kkk-2へ変更された。
[root@t-bobo011 ~]# sh 3test.sh yyy yyy-2 [root@t-bobo011 ~]# ll 合計 112 -rw-r--r--. 1 root root 101 8月 29 16:09 2013 2renshu.sh -rw-r--r--. 1 root root 167 8月 29 16:22 2013 2test-1.sh -rw-r--r--. 1 root root 114 8月 29 18:41 2013 3test.sh -rw-------. 1 root root 1515 8月 6 05:56 2013 anaconda-ks.cfg -rw-r--r--. 1 root root 68568 8月 6 05:56 2013 install.log -rw-r--r--. 1 root root 10721 8月 6 05:54 2013 install.log.syslog -rw-r--r--. 1 root root 0 8月 29 18:42 2013 kkk-2 -rw-r--r--. 1 root root 0 8月 29 16:32 2013 script_test -rwxrwxrwx. 1 root root 96 8月 22 19:14 2013 test-1 -rw-r--r--. 1 root root 185 8月 22 19:23 2013 test-2 -rw-r--r--. 1 root root 135 8月 23 09:33 2013 test-3.sh -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test1 -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test2 -rw-r--r--. 1 root root 0 8月 29 18:42 2013 yyy-2
→yyy→yyy-2へ変更された。
間違ったファイルを指定するとエラーを出すように改造
photo credit: infocux Technologies via photopin cc
先ほどの設定で1つ目の引数に与えられた引数が存在しない、または与えられた引数と同じ名前のファイルが他に存在した場合にエラー・メッセージを表示するようにスクリプトを改造する。
参考:シェル・スクリプト工房
それでは前回のファイル(3test.sh)を改造するっす。
[root@t-bobo011 ~]# vi 3test.sh #!/bin/sh if [ $# -eq 2 ] then if [ -e $1 -a ! -e $2 ] then mv $1 $2 else echo "ファイル名の指定が間違っています" fi else echo "使い方:3testsh 元ファイル 変更ファイル名" fi ~
それでは以下で実行
[root@t-bobo011 ~]# ll 合計 112 -rw-r--r--. 1 root root 101 8月 29 16:09 2013 2renshu.sh -rw-r--r--. 1 root root 167 8月 29 16:22 2013 2test-1.sh -rw-r--r--. 1 root root 209 8月 30 11:22 2013 3test.sh -rw-------. 1 root root 1515 8月 6 05:56 2013 anaconda-ks.cfg -rw-r--r--. 1 root root 68568 8月 6 05:56 2013 install.log -rw-r--r--. 1 root root 10721 8月 6 05:54 2013 install.log.syslog -rw-r--r--. 1 root root 0 8月 29 18:42 2013 kkk -rw-r--r--. 1 root root 0 8月 29 16:32 2013 script_test -rwxrwxrwx. 1 root root 96 8月 22 19:14 2013 test-1 -rw-r--r--. 1 root root 185 8月 22 19:23 2013 test-2 -rw-r--r--. 1 root root 135 8月 23 09:33 2013 test-3.sh -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test1 -rw-r--r--. 1 root root 0 8月 29 17:20 2013 test2 -rw-r--r--. 1 root root 0 8月 29 18:42 2013 yyy
存在しないファイルを指定して実行してみる。
[root@t-bobo011 ~]# sh 3test.sh kkk-2 kkk ファイル名の指定が間違っています
既に存在しているファイルへ変更してみる。
[root@t-bobo011 ~]# sh 3test.sh kkk yyy ファイル名の指定が間違っています
引数とファイル名が間違っていたり、既に存在するファイルに
置き換えようとした際にエラー・メッセージを出してくれた。
まとめ
やはり、シェルスクリプトでも、プログラミングでも、どんどんコマンド叩いて作っていかないと覚えないっすよね。
とりあえず、打つべし!打つべし!です!
以上です。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す