shell

シェルスクリプトの変数加工(%と#)について

シェルスクリプトでこんな変数の加工の仕方を知りませんでした。 まず下記のサンプルプログラムを見てみましょう。 $ HOGEHOGE_VAL="aaa/bbb/ccc/ddd/eee" $ echo ${HOGEHOGE_VAL} aaa/bbb/ccc/ddd/eee $ echo ${HOGEHOGE_VAL%/*} aaa/bbb/ccc/ddd $ echo ${…

「新しいシェルプログラミングの教科書」がめちゃめちゃ良かった

新しいシェルプログラミングの教科書作者:三宅 英明出版社/メーカー: SBクリエイティブ発売日: 2017/11/21メディア: 単行本シェルプログラミングは得意ですか?シェルプログラミングって苦手だったんですよね。っというか嫌い....。なぜかというと、何となく…

シェルスクリプトでブロックコメント

シェルスクリプトでブロックコメントを作る方法を知ってますか?ブロックコメントはpythonでいう"""(ダブルクオート3つ)や'''(シングルクオート3つ)で囲んだコメント、またjavaで言えば/*.....*/といったように書くコメントです。1行コメントは # でコメント…

シェルスクリプトで可変長引数を扱う

シェルスクリプトを実行するときに、いくつになるかわからない引数を全て使いたいときがあります。 例えば作ったファイルを全て何か処理したいとき、いくつの引数になるかわかりません。そういったときに可変長引数を使うと便利です。可変長引数は ${@} です…

数値計算するbcコマンドが便利

こんにちは suganoo です。シェルスクリプトを書いてたりLinuxのコマンドをたたいてると単純な計算をしたいときがあります。単純な足し算やfor文内のインクリメントとか。そんなんであれば $((...)) でどうにかなります。例えば足し算なら CNT=$(( CNT + 1 )…

シェルスクリプトで配列を扱う

こんにちは suganoo です。シェルスクリプトを書いていて配列ってどうやるんだっけ?っとたびたび調べることが多いので記事に書いておこうと思います。 コマンドの結果を配列にする まずコマンドの結果を配列に入れる方法 FILE_LIST=(`ls`)コマンドを``で囲…

文字化けファイルをinodeで消す

探してみたらけっこうやり方あるみたいですね。 でも備忘のため書いておきます。そもそもなんでinode番号指定で消す必要があるのか?ですが、こんなことがありました。 一行一行ファイル名を書いたリストを作る そのリストを読み込む 1行づつ書いてあるファ…

【シェルスクリプト】visudoでスクリプトから/etc/sudoersを編集する。

あるユーザー(foobar)ユーザーを作ったからsudo権限をつけたい。 それをスクリプトから実行したい。としたとき、どうすればいいか?ちょっと悩みました。/etc/sudoersは直接編集できないし。。。 visudo でなにかしらのインプットはできない感じだし。そした…

(俺は)まだシェルスクリプトでこんな初歩的なミスしてんの!?

シェルスクリプトで初歩的なミスをしてました。それに気づくまでに半日くらいかかってしまい すげー自己嫌悪でガッカリです。同じ轍を踏まないようにブログに書いておきます。 クイズ 下記のシェルスクリプトはエラーになりますが なんでだかわかりますか? …

echo でバックスペース文字を出力するオプション

たまにjsonの中身に\nが入ってて 「なんでこんなの入ってるのかなー?邪魔だなー」と思ってました。 わざわざ取り除くのがめんどうだなーと削除してました。例えばAWSのSQSメッセージを見てそのままechoで出力しようとすると \nが入ってて適切に出力されず、…

シェルコマンドのオプションの意味ならこれが便利!

シェルのコマンド理解してますか?僕はうろ覚えでやってます。 昔こうやってた、で覚えて今はそのまま何も考えずに そのオプションをつけてコマンド実行とかやってます。 最近になるとman で調べるのもおっくうで。。。でもこんなんではダメエンジニアになっ…

シェルで最後に改行の無いファイルを読むと最後の行は読み飛ばされる

たまーにあるんだけど windowsで作ったファイルをlinuxで読み込むと BOMが入ったり、末尾に改行がなかったりする。その末尾の改行がないファイルを読み込むと 最後の行が読み飛ばされることがあった。気づくまですげーめんどくさかった。。。 まあ解決方法は…

curl でURLのファイル存在確認をするには

これでOK curl -LI http://google.com/ # いろいろ返ってきますがリクエストの結果が返ってきます HTTP/1.1 200 OK Date: Tue, 10 Jul 2018 07:39:16 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: …

正規表現を確認するのに便利ツール

正規表現を確かめるのに このサイトは便利だった。regex101.com ログをパースするとかけっこう悩むんですよね。 他にも探してみるといろいろありました。 regexper.com qiita.com regex-testdrive.comやっぱ自分は最初のサイトの方が使いやすいかな。 詳説 …

シェルスクリプト内で計算処理したい

シェルスクリプトでちょっとした計算したい時のメモ いくつか方法はありますが、下記が簡単二重カッコをつけるとできる。 XXX="90" YYY=$((${XXX}+10)) echo ${YYY} # <-- 100 他にもexpr でもできるけど 掛け算はダブルクオート("*") つけないとだめとか制…

【シェルスクリプト】タブ区切りファイル(tsv形式)を読み込むには

シェルスクリプトを書いててtsv形式のファイルを読み込んで パースする時にちょっと困った。単純に while read LINE で読み込んで cut でもすればいいだろうと思ったら どうもうまくいかない。どうやら勝手にタブがスペースになっているようだ。理由はよくわ…

【シェル】【エラー】ヒアドキュメントのEOFの前にスペースは入れてはいけない

みたいです。これはちょっとハマりました。 ヒアドキュメントとは ヒアドキュメントという機能を知っていますでしょうか?簡単に言えば複数行で文字列を表示させる機能です。 Qiitaで探すといっぱいでてきます。 詳しい機能は下記など、いろいろ探してみてく…

けっこう便利な trap コマンドなんて知らなかった

あんまりシェルスクリプトは好きじゃないんだけど インフラやってるとシェルスクリプトを書くことがある。その中で他人が書いたコマンドに trap というコマンドがあった。罠…??なんかおどろおどろしい感じがしたけど 調べてみると、なんとまあ便利なコマンド…

pythonでシェルを実行する方法

サーバーでのちょっとした処理をpythonで書くことがあるんだけど pythonからシェルを実行するのどうやるんだっけ? 毎回忘れてしまうので、メモしておく。 とりあえずの使い方 import subprocess cmd = "ls -l" subprocess.Popen(cmd, shell=True) subproces…