シェルプログラミング - はじまり
環境:macOS Monterey version 12.6.1
やりたいことはシェルでファイルを読み込んで…したい。
$ bash -version | head -n 1
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin21)
固定帳ファイルを想定、AWKを使う
MACのターミナルだとls -alの--full-timeが使えなかった
$ ls -al --full-time
ls: unrecognized option `--full-time'
usage: ls [-@ABCFGHILOPRSTUWabcdefghiklmnopqrstuvwxy1%,] [--color=when] [-D format] [file ...]
-fTオプション使うらしい、linuxと列の順序は表示が異なるな…
$ ls -al -fT
drwxr-xr-x 10 username1 staff 320 10 29 18:56:21 2022 .
drwxr-xr-x 4 username1 staff 128 10 28 16:59:42 2022 ..
-rw-r--r-- 1 username1 staff 0 10 28 17:52:50 2022 aaa.txt
環境確認
$ echo $SHELL
/bin/bash
$ ls -al /bin/bash
-r-xr-xr-x 1 root wheel 1326576 8 24 17:59 /bin/bash
$ awk -version
awk version 20200816
テキストファイルを用意
data.txt
aaa.txt aaa1 aaa2
bbb.txt bbb1 bbb2
ccc.txt ccc1 ccc2
$0は行を取得
$ awk '{print $0}' < data.txt
aaa.txt aaa1 aaa2
bbb.txt bbb1 bbb2
ccc.txt ccc1 ccc2
$1は最初のワード
$ awk '{print $1}' < data.txt
aaa.txt
bbb.txt
ccc.txt
$1は最初のワード, $2はスペースで区切られた2つ目のワード
$ awk '{print $1, $2}' < data.txt
aaa.txt aaa1
bbb.txt bbb1
ccc.txt ccc1
シェルにしたい
#!/bin/bash
awk '{print $1}' < data.txt
1行づつ処理したい
#!/bin/bash
FILE_LIST=`awk '{print $1}' < data.txt`
for FNAME in ${FILE_LIST}
do
echo ${FNAME}
done
# output -----
# aaa.txt
# bbb.txt
# ccc.txt
少し修正
#!/bin/bash
FILE_NAME="./data.txt"
FILE_LIST=`awk '{print $1}' < ${FILE_NAME}`
for FNAME in ${FILE_LIST}
do
echo ${FNAME}
done
更新日時を表示
#!/bin/bash
FILE_NAME="./data.txt"
FILE_LIST=`awk '{print $1}' < ${FILE_NAME}`
for FNAME in ${FILE_LIST}
do
echo `ls -alfT ${FNAME}`
done
# output -----
# -rw-r--r-- 1 username1 staff 0 10 28 17:52:40 2022 aaa.txt
ファイルの情報が取り出せるので、更新日時の比較やサイズの比較でいろいろできる。
最後にシェルを終了したい場合は
exit
終了時に結果を設定する場合は以下のようにします。
このシェルの結果となるので、実行後に
echo $?
で表示される値はexitに設定した値になります。
#exit 40
exit 0
この記事が気に入ったらサポートをしてみませんか?