カテゴリー
Linux

【シェルスクリプト】指定ファイルの最終行が空白行かどうかを判定する

指定ファイルの最終行が空白行かどうかを判定するコマンド

  • 標準出力をパイプして、 test コマンドに渡そうと思ったができなかった。 tail -1 ~/.bash_profile | test -z; echo $?, tail -1 ~/.bash_profile | [ -z ]; echo $?, tail -1 ~/.bash_profile | [[ -z ]]; echo $? などではダメだった。
  • test コマンドには、引数が絶対に必要

以上を踏まえて、次のコードで実現できました。

[[ -z $(tail -1 ~/.bash_profile) ]]; echo $?
カテゴリー
Linux

CentOS7 で Git をインストールするシェルスクリプト

手順

yum で git をインストールする。

コマンド

カテゴリー
Linux

【シェルスクリプト】CSV ファイルの任意のカラムの値がリストにある値と一致したらその行を除きたい。

やりたいことと対象のファイル

  • シェルスクリプトを使いたい。ファイルは exclude_list.sh
  • CSV ファイル (target.csv) の 2 列目の値が除外リストにある値と一致したらその行を除きたい。そして resutl.csv として出力したい。
  • 除外リスト (list.txt) は改行区切りのテキストファイル
  • 登場したファイルはすべて同じディレクトリに置く。
カテゴリー
Microsoft

【Git】git svn fetch を自動的に何度も実行するシェルファイル

はじめに

git svn fetch で 何度も time out とエラー終了してしまいます><。

再度 fetch すれば少しずつ進みますので、しつこく何度も自動的に実行したいと存じます。

さしあたって 2 回連続で実行するシェルを書き、試した。

カテゴリー
Linux

インストール済みのパッケージを rpm で再度インストールしようとした時、if 無しでもシェルを止めない方法

Vagrant のプロビジョニング時、シェルファイルを幾つか組み合わせます。

シェルには set -eux を書いていますので、エラーが発生したタイミングで停止させております。

汎用性を高めるために、何度か同じパッケージを rpm でインストールするコマンドを書いています。

そうしますと、2 回目の rpm インストールでエラーと扱われてしまい、シェルが止まってしまいました。

この状況を打開すべく、検討し、結果が出ましたのでメモいたします。

ポイント

  • >/dev/null 2>&1 で無視しようとしたが、エラー扱いとなり、シェルは止まってしまった。
  • rpm インストール前後で、シェルのデバッグモードのオンオフを切り替えることで対処した。
  • 具体的には、コマンド前に set +e し、コマンド実行し、最後に set -e する。
カテゴリー
Linux

【シェル芸人】10000 までの素数を出力するコマンド【Linux】

はじめに

面接官「ほう。得意な言語はPerlですか」 学生「はい!」 面接官「では、10000までの素数を出力してください」 学生「system “seq 2 10000 | factor | awk ‘NF == 2’ | cut -d: -f1″」 面接官「げぇっ シェル芸人」

まあ!素敵!

あら?Perl でと出題されていますのに、シェルで解答なさっていらっしゃるようですわね。それで、面接官が「げぇっ」となってしまいましたのね!面白いですわ♪

さて、今回はこのシェル部分に注目し、各コマンドについて調べることでシェルに対する理解を深める、勉強をしたいと存じます♪

10000 までの素数を出力するシェル

seq 2 10000 | factor | awk 'NF==2{print $2}'

最初に引用したツイートのシェル部分から最後の部分のみ変更しています。いろいろ調べていましたら、「cut」コマンドは「awk」コマンドを工夫することで省略できましたから。

さて、具体的に出力を確認しながら各コマンドを勉強してまいりましょう。その際、10000 までですと出力が多すぎますので、10 までの数で考えます。

カテゴリー
Linux

シェル、sh ファイルの1行目のおまじないの名前ご存知?→シバン

シェルスクリプト1行目のおまじない、#! とは?

シバン (Unix)

シバンまたはシェバン (shebang) とはUNIXスクリプト#!から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。 hash-bangまたはsharp-bangとも言うが、後者を縮めたshebangという呼び方が一般的かつシンプルである。

引用元

実際には「#!」だけではなく、「#!/bin/bash」と書きます。他の書き方もあるようですが、わたくしはこれ以外使用したことはまだありません。