Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ShellScriptまとめ

More than 3 years have passed since last update.

はじめに

シェルスクリプトで学んだことをまとめていきます.
ほとんど自分用です.

CURRENT=$(cd $(dirname $0) && pwd)の意味

これはどこでスクリプトを実行しても同じ結果になるためによく使うコマンドだそうです.
スクリプトが置かれている場所の絶対パスをCURRENTに入れます.

実行するシェルがこちら

/Users/***/Downloads/shell/hello.sh
CURRENT=$(cd $(dirname $0) && pwd)
echo $0
echo $(dirname $0)
echo $CURRENT

これを
/Users/***/Downloads

shell/hello.sh
として実行します.結果はこちら

shell/hello.sh
shell
/Users/***/Downloads/shell

まずそれぞれの意味はこんな感じです.

コマンド等 意味 
$0 スクリプトの名前
dirname hoge hogeのディレクトリ部分を返す
$(~) コマンド置換.~の部分の標準出力で $(~)を置き換える
a && b aが実行され,正常終了し戻り値が0であればbを実行
pwd カレントディレクトリを返す

流れとしては

dirname $0 で実行ファイルのあるディレクトリを標準出力に出力
↓
$( dirname $0)を出力で置き換える
↓
cd $( dirname $0)が正常に行われれば
↓
&&の右の pwd が実行される
↓
最後に$()でコマンド置換

といった感じだと思います.

$0はスクリプトの名前と書いてますが,Downloadsディレクトリで実行した場合,shell/hello.shと帰ってきてるので,実行コマンドみたいなものでしょうか?

文字列の処理

右から抽出

str=$(echo 'hogehoge' | rev | cut -c 1-2 | rev)
echo $str
# ge

反転してから1-2文字目を抽出し,反転し元に戻す感じですね.

'hoge'を含むかの判定

if [ $(echo 'asfhogeagj' | grep 'hoge') ]; then
    echo 'yes'
fi
# yes
hasehiro0828
大学院 修士2回生
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away