『鳥哥のLinux私房菜』学習ノート(8)——bashスクリプトプログラミングの変数
17783 ワード
一、変数の命名
1、アルファベット、数字、下線のみを含み、数字で始まることはできません.2、システムに既存の環境変数と名前を変更するべきではありません.3、名前に意味があります.
二、変数賦課
変数名=値var_name=value等号の両側にスペースは使用できません
三、bash:変数タイプ
1、環境変数
スクリプトは、実行時にサブシェルプロセスを開始します.コマンドラインで起動したスクリプトは、現在のshell環境変数、すなわち環境変数の役割ドメインが現在のshellプロセスとそのサブshellプロセスを継承します.システムが自動的に実行するスクリプト(コマンドライン起動以外)は、各環境変数を自己定義する必要があります.環境変数はexportを使用して設定できます.
2、ローカル変数(ローカル変数)
変数はプロセスの変数に違いないため、1つのshellで宣言された変数は他のshellでは使用できず、サブshellでも入手できません.参照変数に${varname}を追加するか、{}を追加しないこともできます.
ローカル変数:VARNAME=VALUE、役割ドメイン:bashプロセス全体.
ローカル変数:local VARNAME=VALUE、役割ドメイン:現在のコードセグメント.
3、位置変数
$n
例:スクリプトを書き、パラメータ(ファイルパス)を受け入れ、そのパラメータが存在するファイルであるか否かを判定し、もしそうであれば「ok」を表示する
shift、shiftのたびに1つのパラメータを除去shift nはn個を除去することを表す
4、特殊変数(システム変数)
特定のデータを保存するには、次の手順に従います.
$?:前のコマンドの実行状態の戻り値を保存します(0-255).0は正しく、その他はエラーです.このうち1,2127システムは予約されており、その他はカスタマイズ可能である.
出力結果を見ずに返された状態値のみを見たい場合は、出力をデータブラックホール/dev/nullにリダイレクトするだけです.
$#:パラメータの数
$*:パラメータリスト
$@:パラメータリスト(上とは異なります)
例:スクリプトを書き、パラメータ(ファイルパス)を受け入れ、そのパラメータが存在するファイルであるか否かを判定し、もしそうであれば「ok」を表示する
四、変数の取り消し
五、現在のshell変数を表示現在のshellのすべての変数を表示し、環境変数とローカル変数を含む
現在のshell環境変数printenv envまたはexportの表示
六、shell変数の追加
七、最初のスクリプトプログラム
まずスクリプトプログラムfirstを作成する.sh,スクリプトプログラムの最初の行はプログラムの魔数を指定しなければならない,#!解釈器の経路を加える.次に実行権限を付与し、その後実行し、実行時にパスを追加します.パスが与えられていない場合、デフォルトでpathにコマンドが存在するかどうかを探します.
1、アルファベット、数字、下線のみを含み、数字で始まることはできません.2、システムに既存の環境変数と名前を変更するべきではありません.3、名前に意味があります.
二、変数賦課
変数名=値var_name=value等号の両側にスペースは使用できません
[root@hao ~]# NAME=jerry
[root@hao ~]# echo $NAME
jerry
三、bash:変数タイプ
1、環境変数
スクリプトは、実行時にサブシェルプロセスを開始します.コマンドラインで起動したスクリプトは、現在のshell環境変数、すなわち環境変数の役割ドメインが現在のshellプロセスとそのサブshellプロセスを継承します.システムが自動的に実行するスクリプト(コマンドライン起動以外)は、各環境変数を自己定義する必要があります.環境変数はexportを使用して設定できます.
export VARNAME=VALUE VARNAME=VALUE export VARNAME
[root@hao ~]# NAME=jerry
[root@hao ~]# export NAME
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# pstree
init-+-NetworkManager-+-dhclient
...
|-sshd---sshd---sshd---bash---su---bash---bash---bash---pstree
|-udevd---2*[udevd]
`-wpa_supplican
2、ローカル変数(ローカル変数)
変数はプロセスの変数に違いないため、1つのshellで宣言された変数は他のshellでは使用できず、サブshellでも入手できません.参照変数に${varname}を追加するか、{}を追加しないこともできます.
[root@hao ~]# NAME=jerry
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME
[root@hao ~]# exit
exit
[root@hao ~]# echo $NAME
jerry
ローカル変数:VARNAME=VALUE、役割ドメイン:bashプロセス全体.
ローカル変数:local VARNAME=VALUE、役割ドメイン:現在のコードセグメント.
3、位置変数
$n
例:スクリプトを書き、パラメータ(ファイルパス)を受け入れ、そのパラメータが存在するファイルであるか否かを判定し、もしそうであれば「ok」を表示する
[root@hao ~]# nano filetest.sh [root@hao ~]# cat filetest.sh
#! /bin/bash
#
if [ -e $1 ];then
echo "ok"
else
echo "no such file"
fi [root@hao ~]# chmod +x filetest.sh [root@hao ~]# ./filetest.sh /etc/fstab
ok
[root@hao ~]# ./filetest.sh /etc/fstabs
no such file
shift、shiftのたびに1つのパラメータを除去shift nはn個を除去することを表す
[root@hao ~]# nano filetest1.sh [root@hao ~]# cat filetest1.sh
#!/bin/bash
echo $1
shift
echo $1
shift
echo $1 [root@hao ~]# chmod +x filetest1.sh [root@hao ~]# ./filetest1.sh 1 2 3
1
2
3
4、特殊変数(システム変数)
特定のデータを保存するには、次の手順に従います.
$?:前のコマンドの実行状態の戻り値を保存します(0-255).0は正しく、その他はエラーです.このうち1,2127システムは予約されており、その他はカスタマイズ可能である.
[root@hao ~]# ls /var
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
[root@hao ~]# echo $?
0 [root@hao ~]# ls /varr
ls: cannot access /varr: No such file or directory
[root@hao ~]# echo $?
2
出力結果を見ずに返された状態値のみを見たい場合は、出力をデータブラックホール/dev/nullにリダイレクトするだけです.
[root@hao ~]# ls /varr &> /dev/null [root@hao ~]# echo $?
2
$#:パラメータの数
$*:パラメータリスト
$@:パラメータリスト(上とは異なります)
例:スクリプトを書き、パラメータ(ファイルパス)を受け入れ、そのパラメータが存在するファイルであるか否かを判定し、もしそうであれば「ok」を表示する
[root@hao ~]# nano filetest.sh [root@hao ~]# cat filetest.sh
#! /bin/bash
#
echo $#
echo $*
echo $@
if [ $# -lt 1 ];then
echo "Usage:./filetest.sh ARG1 ARG2 ..."
exit 7
fi
if [ -e $1 ];then
echo "ok"
else
echo "no such file"
fi [root@hao ~]# chmod +x filetest.sh [root@hao ~]# ./filetest.sh
0
Usage:./filetest.sh ARG1 ARG2 ...
[root@hao ~]# ./filetest.sh /etc/fstab /etc/fstabs
2
/etc/fstab /etc/fstabs
/etc/fstab /etc/fstabs
ok
四、変数の取り消し
[root@hao ~]# unset NAME
[root@hao ~]# echo $NAME
五、現在のshell変数を表示現在のshellのすべての変数を表示し、環境変数とローカル変数を含む
[root@hao ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
...
現在のshell環境変数printenv envまたはexportの表示
[root@hao ~]# printenv
HOSTNAME=hao
SHELL=/bin/bash
TERM=xterm
...
六、shell変数の追加
[root@hao ~]# ANIMAL=pig
[root@hao ~]# ANIMAL=$ANIMAL:goat
[root@hao ~]# echo $ANIMAL
pig:goat
[root@hao ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@hao ~]# export PATH=$PATH:/usr/local/apache/bin
[root@hao ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin
[root@hao ~]# export PATH=/usr/local/mysql/bin:$PATH
[root@hao ~]# echo $PATH
/usr/local/mysql/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin
七、最初のスクリプトプログラム
まずスクリプトプログラムfirstを作成する.sh,スクリプトプログラムの最初の行はプログラムの魔数を指定しなければならない,#!解釈器の経路を加える.次に実行権限を付与し、その後実行し、実行時にパスを追加します.パスが与えられていない場合、デフォルトでpathにコマンドが存在するかどうかを探します.
[root@hao ~]# cat first.sh
#!/bin/bash
ls /var
cat /etc/inittab
[root@hao ~]# chmod +x first.sh [root@hao ~]# ./first.sh
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault: