| 展開の演算子 | 意味 |
|---|---|
| ${変数:-規定値} | 変数が定義されていてnullではないとき変数の値を返し、それ以外で規定値を返す |
| ${変数:=規定値} | 上と同じだが、規定値を変数にセットするとこが違う |
| ${変数:?メッセージ} | 変数が定義されていてnullではないとき変数の値を返し、それ以外でメッセージを出力しスクリプトを終了する |
| ${変数:+規定値} | 変数が定義されていてnullではないとき規定値を返し、それ以外でnullを返す |
2010年8月10日火曜日
展開の演算子
他にも以下のような展開の演算子があるのでまとめてみた
2010年8月9日月曜日
環境変数
◆環境変数の定義
◆定義されている環境変数の確認
◆環境変数の削除
| $ export 変数名=値 <--- data-blogger-escaped-br="" data-blogger-escaped-value_abc="TEST" data-blogger-escaped-x.=""> |
◆定義されている環境変数の確認
| $ export -p |
◆環境変数の削除
| $ unset 変数名 |
シェル変数
httpdスクリプトを眺めていて以下の文が分からなかった
HTTPD_LANGとゆう変数に値をセットしているってことは何となく分かるけどハイフン('-')と"C"は何を意味するん??
でもって、調べたところ
${変数名}は変数名の区切りを分かりやすくするために{}でくくっているものと理解!
例えば、変数名がVALUEという名前だった場合、${VALUE}とする。
なぜそのようにするかといえば、
とした場合、VALUEAまでが変数名なのか、VALUEに続いてアルファベットAを表示させたいのかが分からなくなってしまうからである。
(ちなみに上の例ではVALUEAが変数名となる)
そして肝心の{}でくくられたハイフンの意味はHTTPD_LANGが定義されていなければ??(それともHTTPD_LANGに何もセットされていなければ??)、"C"をセットするとゆう意味らしい。
後でもうちょい調べよう
追跡取材でハイフンの意味が分かりました
は
のコロン(:)を省略した形で変数が存在した場合、変数名の値を返し
存在しない場合、値を(ハイフンの右側の値)返すという意味らしく
「変数展開」と呼ぶものみたいだ
なので、上記の例
は、HTTPD_LANGが定義されている場合、
HTTPD_LANGの値をそのままセットし
定義されていない場合
"C"をHTTPD_LANGにセットするという意味になる
| HTTPD_LANG=${HTTPD_LANG-"C"} |
HTTPD_LANGとゆう変数に値をセットしているってことは何となく分かるけどハイフン('-')と"C"は何を意味するん??
でもって、調べたところ
${変数名}は変数名の区切りを分かりやすくするために{}でくくっているものと理解!
例えば、変数名がVALUEという名前だった場合、${VALUE}とする。
なぜそのようにするかといえば、
| $ echo $VALUEA |
とした場合、VALUEAまでが変数名なのか、VALUEに続いてアルファベットAを表示させたいのかが分からなくなってしまうからである。
(ちなみに上の例ではVALUEAが変数名となる)
そして肝心の{}でくくられたハイフンの意味はHTTPD_LANGが定義されていなければ??(それともHTTPD_LANGに何もセットされていなければ??)、"C"をセットするとゆう意味らしい。
後でもうちょい調べよう
追跡取材でハイフンの意味が分かりました
| ${変数名-値} |
は
| ${変数名:-値} |
のコロン(:)を省略した形で変数が存在した場合、変数名の値を返し
存在しない場合、値を(ハイフンの右側の値)返すという意味らしく
「変数展開」と呼ぶものみたいだ
なので、上記の例
| HTTPD_LANG=${HTTPD_LANG-"C"} |
は、HTTPD_LANGが定義されている場合、
HTTPD_LANGの値をそのままセットし
定義されていない場合
"C"をHTTPD_LANGにセットするという意味になる
2010年8月5日木曜日
【 sudo 】 root権限でコマンドを実行する
ここまで書いておいてsudoを使っていないオイラって・・・[emoji:i-229]
sudoコマンドを使えば、わざわざスーパーユーザーに変身しなくてもよいとのことで早速試してみた[emoji:i-190]
対象は一般ユーザーで参照できない/var/log/secureファイル
パスワードを聞かれたので入力してみたもののみごと拒否[emoji:i-242]
(ちなみにここで入力するパスワードは、rootのパスワードでも、SSHキーのパスワードでもなく一般ユーザーのパスワードねっ)
どうやらsudoコマンドを使用するためには設定ファイル(/etc/sudoers)を修正しなければならないらしいが、修正はviなどではなくvisudoとゆう専用のコマンドで行わなければならないようだ
上の1行を追記して保存(編集コマンドはviと同じ)
で、再度ログイン後
を実行すればログがみれるようになりますた
sudoコマンドを使えば、わざわざスーパーユーザーに変身しなくてもよいとのことで早速試してみた[emoji:i-190]
対象は一般ユーザーで参照できない/var/log/secureファイル
パスワードを聞かれたので入力してみたもののみごと拒否[emoji:i-242]
(ちなみにここで入力するパスワードは、rootのパスワードでも、SSHキーのパスワードでもなく一般ユーザーのパスワードねっ)
| $ sudo cat /var/log/secure パスワード: "ユーザー名" is not in the sudoers file. This incident will be reported. audit_log_user_command(): 接続を拒否されました |
どうやらsudoコマンドを使用するためには設定ファイル(/etc/sudoers)を修正しなければならないらしいが、修正はviなどではなくvisudoとゆう専用のコマンドで行わなければならないようだ
| # %"sudoを使えるようにする一般ユーザー名" ALL=(ALL) ALL |
上の1行を追記して保存(編集コマンドはviと同じ)
で、再度ログイン後
| $ sudo cat /var/log/secure パスワード: |
を実行すればログがみれるようになりますた
2010年7月29日木曜日
ドットコマンド「.」
ドットコマンド「.」を使うと、指定したスクリプトファイルに記述されている変数や関数がカレントシェルで使えるようになるってことらしい。
うーん、いまいち意味が・・・
てことで早速実践
まずは下のようなスクリプトを作成する
dottest.sh:
して、まずはスクリプトを実行しない状態でDOTTESTを確認してみる
何も表示されない
してして次に~
ドットコマンドを使ってスクリプトを読み込んでみる
先ほどと同じようにDOTTESTを確認してみると・・・
あらまっ、表示されました
関数も同じようにスクリプトに記述しておけばいいらしい
dottest.sh:
と、さっきのファイルを修正して同じようにスクリプトを実行しない状態だと
そんなのないよだけど
を実行した後だと
のような結果になりました
うーん、いまいち意味が・・・
てことで早速実践
まずは下のようなスクリプトを作成する
dottest.sh:
| #!/bin/sh DOTTEST="Dot Test だよーん" |
して、まずはスクリプトを実行しない状態でDOTTESTを確認してみる
| $ echo $DOTTEST |
何も表示されない
してして次に~
| $ . ./dottest.sh |
先ほどと同じようにDOTTESTを確認してみると・・・
| $ echo $DOTTEST Dot Test だよーん |
あらまっ、表示されました
関数も同じようにスクリプトに記述しておけばいいらしい
dottest.sh:
| #!/bin/sh DOTTEST="Dot Test だよーん" function dottest_disp() { echo $DOTTEST } |
と、さっきのファイルを修正して同じようにスクリプトを実行しない状態だと
| $ dottest_disp -bash: dottest_disp: command not found |
そんなのないよだけど
| $ . ./dottest.sh |
を実行した後だと
| $ dottest_disp Dot Test だよーん |
のような結果になりました
2010年4月7日水曜日
pacoなるもの
Apacheをソースからコンパイルしてインスコしたんだけどアンインスコができない。
(削除すべきファイルがわからない)
なのでちょちょいとググってみたら『paco』なるものがあるらしいので早速インスコしてみた。
■ まずはコンパイル準備のお約束
してみたものの
パッケージが足りないと怒られた。
再度ググってみる。
『gtkmm-2.4』はGUIで必要なものらしく以下のようなオプションを指定すればよいらしい。
■ そしてコンパイル&インストール
■ して『paco』自信も管理下に置く
■ 『paco』の管理下でインスコ(インスコするソースがあるディレクトリにて)
でよいらしい
■ 『paco』でインスコしたパッケージの確認
■ 『paco』でインスコしたパッケージに含まれるファイルの確認
■ 『paco』でインスコしたパッケージをアンインスコ
(削除すべきファイルがわからない)
なのでちょちょいとググってみたら『paco』なるものがあるらしいので早速インスコしてみた。
■ まずはコンパイル準備のお約束
| # ./configure |
してみたものの
| checking for GTKMM... configure: error: Package requirements (gtkmm-2.4 >= 2.12) were not met: No package 'gtkmm-2.4' found |
パッケージが足りないと怒られた。
再度ググってみる。
『gtkmm-2.4』はGUIで必要なものらしく以下のようなオプションを指定すればよいらしい。
| # ./configure --disable-gpaco |
■ そしてコンパイル&インストール
| # make # make install |
■ して『paco』自信も管理下に置く
| # make logme |
■ 『paco』の管理下でインスコ(インスコするソースがあるディレクトリにて)
| # paco -D make install |
でよいらしい
■ 『paco』でインスコしたパッケージの確認
| # paco -a |
■ 『paco』でインスコしたパッケージに含まれるファイルの確認
| # paco -f "パッケージ名" |
■ 『paco』でインスコしたパッケージをアンインスコ
| # paco -r "パッケージ名" |
2010年4月3日土曜日
Apacheのコンパイル&インスコ (作成中)
■ Apacheをコンパイルしてインスコする(タイトルのまんまですが
)
1.) まずは下準備
RPMパッケージでインスコしたApacheがどんな感じなのかを確認してみる。
よーわからんがんな感じ
ついでにどんなモジュールが有効になっているかも確認する。
非常にお粗末さまで・・・
■ makefileの作成
◇ インストール時のレイアウト設定(RedHatと同じ)は、
--enable-layout=RedHat
でよい。
1.) まずは下準備
RPMパッケージでインスコしたApacheがどんな感じなのかを確認してみる。
| # httpd -V |
| Server version: Apache/2.2.3 Server built: Nov 12 2009 18:43:41 Server's Module Magic Number: 20051115:3 Server loaded: APR 1.2.7, APR-Util 1.2.7 Compiled using: APR 1.2.7, APR-Util 1.2.7 Architecture: 64-bit Server MPM: Prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=128 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_LOCKFILE="logs/accept.lock" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" |
よーわからんがんな感じ
ついでにどんなモジュールが有効になっているかも確認する。
| # httpd -l |
| Compiled in modules: core.c prefork.c http_core.c mod_so.c |
非常にお粗末さまで・・・
■ makefileの作成
| # ./configure --enable-layout=RedHat --enable-module=so |
◇ インストール時のレイアウト設定(RedHatと同じ)は、
--enable-layout=RedHat
でよい。
| オプション | 意味 |
|---|---|
| --prefix=PREFIX | インストールするディレクトリを指定する (デフォで/usr/local/apache2) |
| - | -- |
| - | -- |
| - | -- |
| - | -- |
| - | -- |
| - | -- |
登録:
投稿 (Atom)