アットウィキロゴ
 
Access(Today: - / Yesterday: - / Totoal: - )


bash


機能

コントロールキー

TTYと絡みで以下が使える。
コントロールキー stty名 機能定義
CTRL-C intr フォアグラウンドプロセスを強制終了
CTRL-D eof 入力を終了(End of file)
CTRL-\ quit フォアグラウンドプロセスを強制終了。「Ctrl+C」よりも強力
CTRL-S stop 画面への出力を停止
CTRL-Q start 画面への出力を再開
DEL または CTRL-? erase 最後の文字を削除する
CTRL-U kill 入力中コマンドを削除
CTRL-Z susp フォアグラウンドプロセスを一時停止

ヒストリ

キーボードから入力したコマンドは自動的にファイルに保存され、過去に実行したコマンドを呼び出して実行することが出来る。
(ホームデリレクトリの下の「.bash_history」)
  • キーボード呼び出し
キー操作 内容
↑キーまたは、Ctrl + P 前(過去)のコマンドを表示
↓キーまたは、Ctrl + N 後ろのコマンドを表示

  • ヒストリバッファ実行
キー操作 内容
!(コマンドパターン) パターンに一致するコマンドを実行
!! 1つ前に実行したコマンドを実行
!n historyコマンドで表示された履歴番号のコマンドを実行
!-n 履歴番号からnを引いた番号のコマンドを実行
^引数1^引数2 1つ前に実行したコマンドの引数を引数1から引数2に変更して実行

キーバインド

Windowsのショートカットキーみたいなもの。
キーバインド 動作
[Ctrl]+p 1つ前のコマンドを呼び出す
[Ctrl]+n 1つ痕のコマンドを呼び出す
[Ctrl]+f カーソルを右に移動
[Ctrl]+b カーソルを左に移動
[Ctrl]+d カーソル位置の1文字を削除(Delete)
[Ctrl]+h カーソル位置の前の1文字を削除(BackSpace)
[Ctrl]+k カーソル位置より右側の文字をすべて切り取る
[Ctrl]+u カーソル位置より左側の文字をすべて切り取る
[Ctrl]+y 切り取った文字を張り付ける
M+< 履歴の先頭コマンドを表示
M+> 履歴の末尾コマンドを表示

コマンド連続実行

連結文字 動作
;(セミコロン) 1行にコマンドを;で区切って複数指定することにより、連続実行する
&& &&の前に指定したコマンドが成功した場合に、&&以降のコマンドを実行する
|| ||の前に指定したコマンドが失敗した場合に||以降のコマンドを実行する。||の前に指定したコマンドが成功した場合には、||以降のコマンドを実行しない。

ジョブ制御

プログラムをシェルのバックグラウンドで動作させたりフォアグランドに移動させたりできる。
コマンド 機能
fg バックグラウンドのコマンドをフォアグランドへ戻す
bg フォアグランドのコマンドをバックグラウンドへ移す
jobs 現在実行中のジョブを表示する
nohup ハングアップシグナルに反応せずにコマンドを実行する。コマンド実行中にログアウトしてもコマンド実行を継続する

ワイルドカード

ファイルグロブと呼ばれる記号を指定してファイルやディレクトリ名などのワイルドカード指定をする。
記号 機能
* 0個以上の文字列に一致
? 1文字に一致
[文字] 指定した文字のいずれかに一致
[!文字] 指定した文字のいずれかに一致しない
[a-z] a~zの範囲の文字に一致
[!a-z] a~zの範囲の文字に一致しない
{str1,str2...} 指定した文字を作成
例: file_{tt1, tt2,tt3}は、file_tt1, file_tt2, file_tt3と展開される


標準入出力

UNIXのファイルディスクリプタのうちの3つは予約され,プロセスが起動時この3つのファイルディスクリプタ(そして,対応するファイルが)が利用可能になる.
予約されている3つのファイルディスクリプタは以下の3つ
(シェルではそれぞれディスクリプタの0番,1番,2番となる)
  • 標準入力(Standard Input)
  • 標準出力(Standard Output)
  • 標準エラー(Standard Error)

リダイレクト

実行例 説明
コマンド > file コマンドの標準出力をfileに書き込む
コマンド >> file コマンドの標準出力をfileに追記する
コマンド < file コマンドはfileの内容を標準入力として受け取る
コマンド << 終了文字 終了文字を入力するまでキーボードから入力を続ける
コマンド 2> file コマンドの標準エラー出力をfileに書き込む
コマンド 2>> file コマンドの標準エラー出力をfileに追記する
コマンド > file 2>&1 コマンドの標準出力と標準エラー出力をfileに書き込む
コマンド >> file 2>&1 コマンドの標準出力と標準エラー出力をfileに追記する

パイプライン

コマンドの標準出力をファイルではなく別のコマンドの標準入力にすることをパイプという.
実行例 説明
コマンドA|コマンドB コマンドAの標準出力をコマンドBの標準入力に渡す
コマンド|tee file コマンドの標準出力を表示するとともにfileに書き込む

プログラミング1

インタプリタ指定

シェルの先頭に付ける「#!/bin/bash」の事で、どのシェルスクリプトを実行するかを明示する。
例)
#!/bin/bash      -> Linuxの場合
#!/usr/bin/bash  -> Solarisの場合

シェル変数

プログラムで情報を格納する変数でシェル内部でのみ利用可能な変数
変数の値は、「$」を先頭につけることによって参照可能となる。
シェル変数の有効範囲(スコープ)は、シェルスクリプトを実行しているシェルプロセスのみとなる。
代入は「変数=値: VAL="1"」という形
$変数名 変数の値を参照
${変数名} 変数名の区切りを明確にして変数の値を参照

変数を扱う場合、「""」(ダブルクォーテーション)、「''」(シングルクォーテーション)、「``」(バッククォーテーション)があり意味が異なる。
""(ダブルクォーテーション) 変数を展開して、その中身を扱う
「''」(シングルクォーテーション) 変数を展開しないで文字として扱う
「``」(バッククォーテーション) コマンドを展開して実行結果を扱う

環境変数

環境変数は、グローバル変数のような扱いで他プロセスのシェルからも参照できる特別な変数。export(csh系ではsetenv)を指定して環境変数にする

環境変数名 意味
HOME ユーザのフォームディレクトリパス
PATH コマンドのサーチパス
TERM 現在のターミナルの種類
SHELL 使用中のシェル
USER 現在のユーザ名
LANG 使用中の言語
HOSTNAME ホスト名
PS1 プロンプト文字

関連コマンド 機能
export Bourne系シェルでの環境変数設定
setenv Cシェル系での環境変数設定
printenv 環境変数の内容表示
env 環境変数の内容表示・設定
set すべての変数内容表示、シェル設定
unset 変数、関数の定義削除
source し知恵されたファイルを読み込み、コマンドを実行
exec 新しいプロセスを起動せずにコマンドを実行

スクリプトの引数

スクリプト実行時に渡す引数h、BASHの特別な変数として参照可能
変数名 引数の内容
$0 シェルスクリプト名
$数値、${数値} 指定した数値番号(1~n)目の引数の値
$# 引数の数
$@ すべての引数)空白区切り)

プログラミング2(制御文)

if/else

単純な 条件文 を実現するのに「if と else」がある。
  • 構文
if  条件
then
    文
else
    文
fi

  • 条件評価
    • 文字列比較
演算子 真になる条件
str1 = str2 str1 と str2 が一致する
str1 != str2 str1 と str2 が一致しない
-n str1 str1 が NULL ではない(長さが 0 より大きい)
-z str1 str1 が NULL である(長さが 0)
    • ファイル属性の確認
演算子 真になる条件
-d file file が存在し,かつディレクトリである
-e file file が存在する
-f file file が存在し,かつ通常ファイルである(ディレクトリや特殊ファイルではない)
-r file file に read パーミッションがある
-s file file が存在し,空ではない
-w file file に write パーミッションがある
-x file file に execute パーミッションがある, ディレクトリの場合は search パーミッションがある
-O file file の所有者である
-G file file のグループ ID が自分のものと一致する(複数のグループに属している場合はそのうちのどれかと一致する)
file1 -nt file2 file1 が file2 よりも新しい
file1 -ot file2 file1 が file2 よりも古い
    • 整数による条件式
演算子 比較
-lt より小さい
-le 以下
-eq 等しい
-ge 以上
-gt より大きい
-ne 等しくない

for

繰り返しを実現する構造
  • 構文
for name in list
do
    $nameを利用する文
done

case

場合分けの構造を実現
case 条件式 in
   パターン1)
       処理1 ;;
   パターン2)
       処理2 ;;
   :
   *)
       デフォルト処理;;
esac

select

指定されたリストを番号付きで表示し,ユーザに番号を入力させる.
select name in list
do
    $name を利用する文
done

while until

while 条件式
do
    処理
done

until 条件式
do
    処理
done

演算子

文字列演算子

  • 置換演算子
演算子 置換内容
${varname:-word} varname が存在し NULL ではない場合, その値を返す.それ以外は,word を返す.
${varname:=word} varname が存在し NULL ではない場合, その値を返す.それ以外は,varnameに wordを設定して返す. ただし,位置パラメータや特殊なパラメータを除く.
${varname:?message} varname が存在し NULL ではない場合, その値を返す.それ以外は varnameのあとに message を出力し, 現在のコマンドあるいはスクリプトを中止する. message を省略すると初期メッセージ parameter null of not setが生成される.
${varname:+word} varname が存在し NULL ではない場合, word を返す.それ以外は NULL を返す.

  • パターンとパターン照合
演算子 置換内容
${variable#pattern} variable の値の最初の部分と pattern が一致した場合, もっとも短く一致する部分を削除して残りの部分を返す
${variable##pattern} variable の値の最初の部分と pattern が一致した場合, もっとも長く一致する部分を削除して残りの部分を返す
${variable%pattern} variable の値の終りの部分と pattern が一致した場合, もっとも短く一致する部分を削除して残りの部分を返す
${variable%%pattern} variable の値の終りの部分と pattern が一致した場合, もっとも長く一致する部分を削除して残りの部分を返す

  • 長さを返す
演算子 置換内容
${#variable} variable の長さを返す

数値演算子

  • 数値演算子
演算子 置換内容
+ 加算
>> 右にビットシフト
- 減算
& 論理積
* 乗算
論理和
/ 除算(切り捨て)
論理否定
% 剰余
! 論理否定
<< 左にビットシフト
^ 排他的論理和

  • 関係演算子
演算子 置換内容
< より少ない
== 等しい
より大きい
!= 等しくない
<= 以下
&& 論理積
>= 以上
|| 論理和

  • 数値変数の代入
演算子 置換内容
let 数値演算式の計算結果を変数に代入可能

組み込みコマンド

コマンド(組込み) 説明
read ユーザからの入力を変数に代入
expr 算術演算処理を実施し、その結果を標準出力に表示する
eval 複数の変換処理を一度に行う
seq 数列を表示する
echo 引数を標準出力へ書き出す
export 変数を大域変数として追加する
declare 変数を整数型として処理したり、参照のみ(read only)に設定することができる
最終更新:2010年02月07日 19:25