MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

シェルスクリプト逆引きメモ


フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版

目次

はじめに

長めのシェルスクリプトを作るときに、

便利な逆引きメモです。

シェルスクリプトをデバックモードにする。

シェルスクリプトの冒頭に、

#!/bin/bash -veux と書くと、各コマンドを表示してくれたり、

エラーが発生した場合や、

未定義の変数がある場合は、そこで止まってくれます。

 

error関数とabort関数を使う

下記の記事の通りです。

pyopyopyo.hatenablog.com

error関数とabort関数を使うと

$ command || error "Error"

でcommandが失敗したときに、エラーハンドリングできます。

 

コマンドが使えるか確認する

あるコマンドがシェルから実行できるかを確認するには、

下記のtypeコマンドを使うことができます。

 

下記はyumコマンドが使える場合は、

yumでvimをインストールし、

それ以外はaptでインストールする例です。

# yumコマンドがある場合は
if type yum > /dev/null 2>&1; then 
        sudo yum install vim
else # Ubuntu
        apt install vim
fi

複数のファイルを連結する

cat *.txt > all.txt

txt形式のログファイルを連結したりするのに便利です。

 

二つのコマンドを一行で実行する

; (セミコロン)でつなぐと一行で書けます。

シェル・スクリプト・リファレンス - 【 複数のコマンドの実行「;」 】:ITpro

 

シェル変数のデフォルト値

下記のようにすると、

$1が設定されていない場合は、fooにhogeが入り、

$1が設定されている場合は、fooに$1の値が設定されます。

foo=${1:-hoge}

 

カレントディレクトリ以下の全ファイルからxxxという文字列を検索

find ./ -name '*'| xargs grep 'xxx'

.cppファイルのみから見つけたい時

find ./ -name '*.cpp' | xargs grep 'xxx'

 

$$は予約語でプロセス番号を表す。

一時ファイルの名前にすると良い

 

cutコマンドを使うと各列の一部のデータを取得できる。

ドット区切りで第二フィールドを取得する。

$ cut -d. -f2

 

数字列を取得する場合はegrepを使うと良い

0-9の数字が8個並ぶ所を取得する

$ egrep "[0-9]{8}"

awkの使い方

awkは位置指定付きのgrepとして使える

第5フィールドにsuを含む行を抽出

awk '$5=="su*"

awkでは文字列を”“で囲むと文字列扱い、囲まないと数値扱いになる

数値にすれば大小の比較条件などを使える。

sedの使い方

nanが混入してしまったデータを0に置き換える

別のファイルとして置き換えたい場合

$ cat hoge.txt | sed "s/nan/0/g" > hoge2.txt

同じファイルとして上書きしたい場合

$ sed -i "s/nan/0/g" hoge.txt

単語置換

$ #11行目~25行目までAAAをBBBに置換する $ sed -e '11,25 s/AAA/BBB/g' source.txt

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com