Skip to main content

11 posts tagged with "Shell"

View All Tags

Gitの基本操作コマンドでローカルリポジトリ上でブランチを作成

· 7 min read
Yu Sasaki
Enterprise Security Manager / Advisor

本記事は基本的なGitコマンドを基にサンプルシェルの更新の過程でローカルブランチの作成手法を紹介する。 対象サブコマンド: init, status, add, commit, log, show, branch, checkout, tag. ※尚、各項目のコマンド説明文にgit開発元のReferenceリンクを併記している。

前提

以下の内容は本記事には含まず、既知・設定済みとして扱う。

  • バージョン管理, Gitの概要
  • Gitクライアントのインストール
  • Gitクライアントの設定(user.name, user.email等)

IBM System i (AS400): シェル (qsh) からCLコマンドを実行する

· 2 min read
Yu Sasaki
Enterprise Security Manager / Advisor

IBM i(AS400)上のシェルスクリプト内でCLコマンドを実行することができるので、物によってはCLPでプログラムを組むより簡単にできることがある。当記事は「引数で与えられたファイル内の端末デバイス一覧を用いてデバイスを一括で作成するシェル」を通じてシェル内でのCLコマンドの使用方法を紹介する。

UNIX: pushd, popd, dirs - ディレクトリスタックによる移動

· 2 min read
Yu Sasaki
Enterprise Security Manager / Advisor

シェルコマンドpushd, popd, dirsを用いて、ディレクトリスタックを使うことでディレクトリ間の移動を簡潔に行うTips。

使い方

pushdでスタックにジャンプしたいディレクトリを登録し、それをカレントディレクトリとする。popdで一番最後に登録したディレクトリを取り出し、それをカレントディレクトリとする。dirsでスタック内に登録されているディレクトリを表示。

スタックへディレクトリの登録

$ pushd /Applications/MAMP
/Applications/MAMP ~
$ pushd /var/log
/var/log /Applications/MAMP ~
$ pushd /etc
/etc /var/log /Applications/MAMP ~
$ dirs -v
0 /etc
1 /var/log
2 /Applications/MAMP
3 ~
$ popd
/var/log /Applications/MAMP ~
$ dirs -v
0 /var/log
1 /Applications/MAMP
2 ~
$ pwd
/var/log

ディレクトリ間の移動

上記のスタックの状態からホームディレクトリに移動するにはpushd +2を使用する。

$ pushd +2
~ /var/log /Applications/MAMP
$ pwd
/Users/yu
$ dirs -v
0 ~
1 /var/log
2 /Applications/MAMP
$ pushd +2
/Applications/MAMP ~ /var/log
$ pwd
/Applications/MAMP
$

aliasへの登録

当コマンドをより便利に使う為に、以下のaliasやよく使うディレクトリを予め~/.bash_profile等に登録しておくと良い。

alias pu='pushd'
alias po='popd'
alias dirs='dirs -v'
alias d='dirs'
alias pu1='pushd +1'
alias pu2='pushd +2'
alias pu3='pushd +3'
alias pu4='pushd +4'
alias pu5='pushd +5'
alias pu6='pushd +6'
alias pu7='pushd +7'
alias pu8='pushd +8'
alias pu9='pushd +9'

これで若干でも日々のタイプ量が減ると思うと、かなり良い。

参考サイト

Bash: 数字とその他 文字列の判別

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

数字文字列とそれ以外の文字列を判別する条件式は以下の通り。

スクリプト

#!/bin/sh
if expr "$1" : '[0-9]*' > /dev/null ; then
echo "数字です"
else
echo "数字以外です"
fi

実行結果

$ ./if_numstr.sh 123
数字です
$ ./if_numstr.sh abc
数字以外です

内容

exprで正規表現を用いて数値を判定。exprは内部コード以外にも標準出力にも結果を返すので、不要なそれは/dev/nullへリダイレクトする。

Shell Script: testコマンドによる条件判定 (数値、文字列)

· 2 min read
Yu Sasaki
Enterprise Security Manager / Advisor

test_command 上表はshの組み込み、かつ外部コマンドでもあるtestコマンドの判定表。testコマンドは与えられた条件式に対して、終了コードに真「0」、**偽「1」**を返す。他のプログラミング言語の条件判定とは真偽の値の意味が逆なので違和感を覚えるが、例えばC言語のmainのreturn (システムへのreturn)は正常では0、異常では1を返す例と同様と考えるとしっくりくるかな。。

Shell Script: for文 - ワードリストに変数、コマンドを使用

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

以下のシェルスクリプトはfor文のワードリストに文字列変数を使用したもの。文字列はスペース区切でパラメータ変数に格納されloopする。また、ワードリストにバッククォートで括ったコマンドを指定すると、そのコマンドの実行結果がパラメータ変数に渡される。

#!/bin/sh
VARS="1 2 3 four five"
for VAR in $VARS
do
echo $VAR
done
echo ""
for LIST in `date`
do
echo $LIST
done

プロセスの監視&自動復旧(簡易版)

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

プロセス監視シェルスクリプトの実行結果

先日書いたシェルスクリプトでプロセスを監視し自動実行&自動killのシェルスクリプトは、その後結局使わず、さらに簡易的なコードで済ませました。

クエリーサーバのチェックスクリプト

scheckp.sh

#!/usr/bin/sh
while true
do
isAliveSev=`ps -ef | grep "/server" | grep -v grep | wc -l`
if [ $isAliveSev = 1 ]; then
echo "o:server process"
else
echo "x:server process"
/ret/sev/server &
fi
sleep 300 # モニター間隔(秒単位)
done

エンジンサーバのチェックスクリプト

echeckp.sh

#!/usr/bin/sh
while true
do
isAliveEng=`ps -ef | grep "/engine" | grep -v grep | wc -l`
if [ $isAliveEng = 1 ]; then
echo "o:engine process"
else
echo "x:engine process"
/ret/eng/engine &
fi
sleep 300 # モニター間隔(秒単位)
done