こんにちは〜
最近UnixやShellScriptについて学び始めました.まだまだ初歩段階で、できることは限られておりますが、とても楽しいです!
ローカルのフォルダやファイルに直接関与できるので、普段のJavaやpythonのコーディングの時とは違った面白さを実感しています.
以前、コマンド使いの教授が、GUIよりCUIの方が早くて良いと言っていたのですが、最近その良さをひしひしと実感しております.
今回の記事の主旨ですが、ShellScriptでコーディングする上で、つい忘れがちなことを備忘録として、残していきたいと思います.
引数で指定したフォルダ内のファイルを1行ずつ取得
dir=$1
for f in $dir
do
while read line
do
処理内容
done < f
done
よく使います.
フォルダ内の全ファイルを一括で調べたい時にとても便利です.
if文, 条件式
if [ 条件式 ]; then
処理内容1
elif [ 条件式 ]; then
処理内容2
else
処理内容3
fin
ifの構文は問題ないのですが、[]内の条件式の両端に半角スペースを入れ忘れがちです.気をつけたいです.
変数宣言
変数=値
「変数 = 値」と書かないようにする!
本当に些細なことなのですが、他の言語でコーディングをする際は、見やすさを考慮してスペースを入れていています.その癖がshellでも発動してしまうことが多々あります.
スペースをつけてしまうと、変数をコマンドとして誤認識してしまうので注意が必要です
.
shell内でオプション指定付きechoコマンド
/bin/echo -n $変数
シェル内だと、/bin/をつけないとうまくオプションを認識してくれませんでした.
ちなみに「-n」は改行なしというオプションです.
指定した行を取得, 表示
line=`wc -l ファイル名 | awk '{print $行数}`
head -n $line ファイル名 | tail -n 1
数字の最大最小を取り出すことが多いので、基本的にはsortしてから、最初の行と最後の行を取得することが多いです.
ちなみにsortは
sort -n -r -o sortしたいファイル名 sort後を記録するファイル名
「-n」numberは数字順に並び替え
「-r」reverseはたしか降順?に並び替え
「-o」outputは出力先を指定して並び替え
となっています.
思ったこと
shellを使えば、ローカルファイルを手軽に扱うことができるので楽しいです.
javaでファイルを読み込むとしたら、FileライブラリやBufferdReaderライブラリなどを使わないといけないので、ちょっと手間な気がします.
言語って勿論好みにもよりますが、使う場面に合うように、適材適所を考えることが大事ですね.
いろんな言語やライブラリを使いこなせるようになって、どんな問題にも即座に対応できるようになりたいです.地道に勉強していこうと思います!