見出し画像

シェルプログラミング - はじまり

環境: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




この記事が気に入ったらサポートをしてみませんか?