LoginSignup
0
1

More than 1 year has passed since last update.

シェルスクリプトを書いている時に困ったこと・詰まったこと

Posted at

シェルスクリプトを書いた中で、困ったこと・詰まったこととその解決方法メモ

最近、学習し始めたシェルスクリプトを書いている時に、困ったこと、詰まったこととその解決方法を書き留める。

< 困ったこと、詰まったこと >

  • 代入しても、変数の中身が変わらない。
  • sedで1行削除したけど、ファイルの中身が変わっていない。
  • 最後の引数が関数に渡っていない。

1. (困ったこと) 変数の中身が変わらない。

<症状等>
csvファイルの中身を1行ずつ読み込んで、条件に合致したらカウントアップしたが、hitcountは0のままだった。

sample.sh
  # csvから1行ずつ読み込む
  hitcount=0
  cat data.csv | while read oneline
  do
      $product_id=$(echo "${oneline}" | cut -d ',' -f 1)
      $product_name=$(echo "${oneline}" | cut -d ',' -f 2)
      $product_type=$(echo "${oneline}" | cut -d ',' -f 3)
      if [ "$product_type" == "量産品" ]; then
        hitcount +=1
      fi
  done
  # ~ 中略 ~
  if test $hitcount -ne 0; then # <---$hitcount=0のまま

<解決方法>
cat ファイル名 から < ファイル名へ変更したら、上手く動いた。

sample2.sh
while read oneline
do
# ~ 省略
done < data.csv

2. (困ったこと) sedで1行削除したけど、ファイルの中身が変わっていない。

<症状等>
sedで条件に該当する行を削除したが、ファイルの中身は変わらなかった。
<解決方法>
iオプション(標準出力せずに直接ファイルを上書き)を付ける。

sample2.sh
# 最初に書いたコード
sed '/条件/d' data.csv

# 修正後
sed -i '/条件/d' data.csv

3. (困ったこと) 最後の引数が関数に渡っていない。

<症状等>
最後の引数が渡っていない。

<解決方法>
スペースのある引数が原因。渡すときには""で囲む。

sample3.sh
# 最初に書いたコード
a='AI CHAT'
b='SERVER'
myfunction $a $b

# 修正後
myfunction "${a}" "${b}"

感想、メモ

  • 困ったり、詰まったら、まずコマンドのヘルプを読んでみることとする。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1