LinuCレベル1 Version 4.0 102試験の例題と解説
105.1 シェル環境のカスタマイズと使用
を解いてみます。
■トピックの概要
このトピックの内容は以下の通りです。
<105.1 シェル環境のカスタマイズと使用>
重要度 4
<説明>
ユーザの要求に応じてシェル環境をカスタマイズできる。全体のプロファイルおよびユーザのプロファイルを変更する。
<主要な知識範囲>
・ログイン時または新しいシェルを生成したときに、環境変数(PATHなど)を設定する
・よく使用する一連のコマンド用にBashの関数を作成する
・新しいユーザアカウント用のスケルトンディレクトリを保守する
・コマンドサーチパスを適切なディレクトリに設定する
<重要なファイル、用語、ユーティリティ>
.
source
/etc/bash.bashrc
/etc/profile
env
export
set
unset
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
~/.bash_logout
function
alias
lists
■例題
以下のシェルの関数定義についての説明として、誤っているものを選択してください。
[関数定義]
------------------------------------------------------------------------------------------
function sum() {
total=0
if [ $# -lt 2 ]
then
echo "Usage: sum 1 2"
return 1
fi
for num in $@
do
total=`expr $total + $num`
if [ $? -ne 0 ]
then
echo "Invalid number: $num"
return 2
fi
done
echo $total;
return 0
}
------------------------------------------------------------------------------------------
1. この関数の名前はsumである
2. この関数は引数で渡された値の加算を行う
3. この関数は、必ず2つの引数を取る
4. この関数は、計算できない値が渡された場合に、戻り値として2を返す
※この例題は実際の試験問題とは異なります。
解答と解説
答えは「3. この関数は、必ず2つの引数を取る」です。
関数は以下のように定義します。
------------------------------------------------------------------------------------------
function 関数名() {
実行するコマンド
}
------------------------------------------------------------------------------------------
以下のようにfunctionや()を省略して定義することもできます。
なお、両方とも省略することはできません。
------------------------------------------------------------------------------------------
関数名() {
実行するコマンド
}
function 関数名 {
実行するコマンド
}
------------------------------------------------------------------------------------------
定義した関数は、コマンドと同じように実行できます。
例題の関数は以下のように実行できます。
------------------------------------------------------------------------------------------
$ sum 1 2 3
6
------------------------------------------------------------------------------------------
次に例題の関数のポイントを解説します。
------------------------------------------------------------------------------------------
function sum() {
total=0
if [ $# -lt 2 ] ------------------ 1
then
echo "Usage: sum 1 2"
return 1
fi
for num in $@ ------------------ 2
do
total=`expr $total + $num` ------------------ 3
if [ $? -ne 0 ]
then
echo "Invalid number: $num"
return 2
fi
done
echo $total; ------------------ 4
return 0
}
------------------------------------------------------------------------------------------
この関数は、例題の選択肢にもあるように、引数で渡された数値を加算して出力する関数です。
処理毎に振った番号毎に、解説していきます。
1. $#には、関数に渡された引数の数が代入されています。この例の場合、2より小さい場合はエラーとして、戻り値で1を返します。2つ以上の引数を取ることができるため、選択肢「3. この関数は、必ず2つの引数を取る」は誤りになります。
2. $@には、関数の引数がすべて渡されます。渡された引数をfor文でひとつずつ変数numに代入してループ処理を行います
3. 変数totalに変数numの値を加算しています。加算に失敗した場合、エラーとして戻り値で2を返します
4. すべての引数の加算が終わった変数totalを出力しています。
今回は、単純な加算を行う関数の例ですが、関数の定義や引数の渡し方、関数内部での引数の参照方法など、さまざまな要素が含まれています。理解できない箇所がある場合は、おさらいしておきましょう。
■例題作成者 株式会社デージーネット ソリューション開発部 森 彰吾 氏