Linux Bash系列教程(6)-Bash 变量基础

Bash系列教程目录:

  1. Bash系列教程(10)-流程控制之 case条件判断
  2. Bash系列教程(9)-流程控制之 if条件判断
  3. Bash系列教程(8)-Bash 数组变量用法详解
  4. Bash系列教程(7)-Bash 变量高级特性
  5. Bash系列教程(6)-Bash 变量基础
  6. Bash系列教程(5)-内置命令介绍
  7. Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection)
  8. Bash系列教程(3)-命令行中多条命令组合和运行控制
  9. Bash系列教程(2)-使用历史命令扩展
  10. Bash系列教程(1)-命令行中快速输入和修改 bash (快捷键组合)

与一些我们接触到的结构化编程语言和面向对象编程一样,bash 中也有变量。变量就是用来存储数据的地方,Bash 把任何变量都使用字符串的形式存储,虽然我们可以使用 declare 来改变变量的类型,但是不会改变存储形式。

1、变量命名方式
变量名中可以使用英文字母、数字及_,但开头不能使用数字,便名区分大小写,不限制长度。

2、变量赋值
变量名=值
例如:

name=zpz
age=1000
hoby='kungfu'

3、获取变量的值
可以通过两种方式获得变量的值
$变量名
${变量名}

4、清空变量
变量名=

5、取消变量,清空变量并是使变量不存在

unset -v 变量名
unset -f 函数名

6、变量类型
我们可以使用 declare 改变变量的类型。

declare -p variable    显示变量 variable的类型
declare -a variable    将 variable类型设置为数组
declare -A variable    将 variable类型设置为关联数组
declare -f variable    将 variable类型设置为数组
declare -i variable    将 variable类型设置为整数
declare -F variable    显示所有函数名称及其属性
declare -r variable    将 variable设置为只读变量,效果同于 readonly,即只能读取不能改变它的值
declare -t variable    将 variable具有 trace属性
declare -x variable    将 variable设置为环境变量,等同于效果 export

只读变量声明

readonly -p            显示当前具有只读属性的变量或者函数
readonly -f func       将函数设为不可更改
readonly -a arr        数组只读
readonly variable      设置变量为只读

7、变量作用范围
一般变量之在当前 shell 或者当前 脚本文件中有效,但是对于使用 . 或者 source 调用的脚本文件其变量也将会在当前 shell中有效。使用 export 或者 declare -x 导出的环境变量将会在其之 shell中有效。

8、字符串
虽然我们可以不使用引号表示字符串如:
str1=well done.
但是我们还是提倡使用单引号或者双引号表示字符串
单引号字符串表示的就是我们书写的字符此,它能直接表达我们的书写意图。
双引号字符串它会对字符中的变量进行替换,并且对空白字符处理和但引号有一定的区别,假如我们需要在 $ 的前面加上 \来表示字符 $,而不使其作为一个变量来解释。

str2='wysiswyg'
echo $str2
wysiswyg

name='zpz'
str3="my name is $name."
echo $str3
my name is zpz.

9、特殊变量

$1 ~ $n     程序或者函数的位置参数,第一个参数为 $1,第二个参数为$2,...,第n个参数为 $n,若超过 9 ,
            我们需要使用 ${n} 来表示,如 ${10}
$*          所有位置参数的字符串形式
$@          所有位置参数组成的串行
$#          位置参数的个数
$?          上一个命令执行返回值,0为成功,非 0 为出现错误
$$          当前 shell的进程编号
$!          上一个后台进程的进程编号
$_          bash 脚本文件执行时,bash 程序的句对路径,如:/bin/bash;或上一个命令执行时,最后一个位置参数;或检查邮件时邮件的文件名
$-          bash shell 当前使用的功能选项

10、bash 数组
bash 仅支持一维数组,数组索引从 0 开始但可以不连续,索引还可以用表达式表示
设置数组的值,可以单独为每一个索引指赋值,也可以为数组整体赋值

Arr[0]=1
Arr[1]=5
Arr[5]='array value 5'

Arr1=('v1' 'v2' 4)
Arr2=(100 [10]=1000)

获取数组的元素

${数组名[索引值]}
echo ${Arr[0]}

获取数组元素个数

echo ${#Arr[@]}
echo ${#Arr[*]}

取消数组元素

unset Arr[1]

取消数组,这个取消变量一样

unset Arr

以单个字符串的形式取出所有的数组元素

echo ${Arr[*]}

以串行的方式取得所有的数组元素

echo ${Arr[@]}

11、关联数组,已键值的方式存储

declare -A Zpz
Zpz[name]='zpz'
Zpz[age]=100
Zpz[blog]='http://zpz.name'

echo "My name is ${Zpz[name]}, i am ${Zpz{age}} old, my blog is Zpz[blog]"

12、bash 内置变量
bash 内置了很多默认的变量,这些需要我们花时间去了解使用,以下我们列举一部分:
BASH
BASH_ENV
BASH_VERSION
CD_PATH
EVN
EUID
FUNCNAME
GROUPS
GLOBIGNORE
HISTCMD
HISTCONTROL
HISTFILE
HISTFILESIZE
HISTIGNORE
HISTSIZE
HOME
HOSTFILE
HOSTNAME
HOSTTYPE
IFS
IGNOREEOF
INPUTRC
LANG
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LINENO
MACHTYPE
MAILCHECK
MAILPATH
OLDPWD
OPTARG
OPTIND
OPTERR
OSTYPE
PATH
PPID
PROMPT_COMMAND
PS1
PS2
PS3
PS4
PWD
RANDOM
REPLY
SECONDS
SHELL
SHELLOPTS
SHLVL
TIMEFORMAT
TMOUT
UID

9 Trackbacks

  1. By Bash系列教程(5)-内置命令介绍 – 薹翮 on 2012 年 7 月 28 日 at 上午 12:00

    […] Bash系列教程(6)-Bash 变量基础 […]

  2. […] Bash系列教程(6)-Bash 变量基础 […]

  3. By Bash系列教程(2)-使用历史命令扩展 – 薹翮 on 2012 年 7 月 28 日 at 上午 12:01

    […] Bash系列教程(6)-Bash 变量基础 […]

  4. By Bash系列教程目录 – 薹翮 on 2012 年 7 月 28 日 at 上午 12:01

    […] 薹翮 我悄悄地离开,在昨天;今天我又静静地到来 SEO 查询工具   « Bash系列教程(5)-内置命令介绍 Bash系列教程(6)-Bash 变量基础 » […]

  5. […] Bash系列教程(6)-Bash 变量基础 […]

  6. By Bash系列教程(7)-Bash 变量高级特性 – 薹翮 on 2012 年 7 月 28 日 at 下午 2:42

    […] 薹翮 我悄悄地离开,在昨天;今天我又静静地到来 SEO 查询工具   « Bash系列教程(6)-Bash 变量基础 […]

  7. By Bash系列教程(8)-Bash 数组变量用法详解 – 薹翮 on 2012 年 8 月 2 日 at 上午 8:46

    […] Bash系列教程(6)-Bash 变量基础 […]

  8. […] Bash系列教程(6)-Bash 变量基础 […]

  9. […] Bash系列教程(6)-Bash 变量基础 […]

Post a Comment

Your email is never shared. Required fields are marked *

*
*