shell

【シェルスクリプト】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…