1、只能包含字母、数字和下划线,并且不能以数字开头,
2、不应该跟系统中已有的环境变量重名
3、最好能见名知意
2、变量赋值:
注意:用echo 显示变量名的值时,需要用$符号。


3、变量类型:
任意脚本在执行时会启动一个子shell进程,
命令行中启动的脚本会继承当前shell的环境变量
系统自动执行的脚本(跟命令行无关)就需要自我定义需要的各环境变量
位置变量:
$1,$2,....
$? 上一个命令执行状态返回值
$# 参数的个数
$* 参数列表
$@ 参数列表
$0 命令本身 脚本本身
执行脚本时的脚本路径及名称
程序执行一般有两类返回值程序执行结果;
执行状态返回代码(0-255)
0表示正确
1-255:错误执行 1,2,127 系统预留 有特殊意义
4、变量取消:
unset varname
撤销fld_name域的值
查看当前shell中的变量
set 不带任何参数和选项

env
export
printenv
字符串变量添加新的变量
PATH添加新的路径
export PATH=$PATH:/usr/local/apsch/bin

5、取得变量值:
$变量名称${变量名称} $(x) 这个可以用来当做命令调用
如果变量在语句当中被引用,必须要使用${x}才可以,取得数组的变量值时候也需要使用${}来调用

关于变量和引号的关系:
单引号:所见即所得双引号:使特殊符号生效

6、调整变量的属性:

count环境变量readonly之前可以修改,之后变成只读变量,不可以在修改。
readonly -p 读取只读变量,显示在终端。
2、declare 命令
-r:设定只读变量-p:显示变量的属性
-a:变量是一个数组
-f:搜寻命令时,只找函数
-i:变量是一个整数
-F:显示所有的函数式名称及其属性
-t:设立变量具有trace属性
-x:设定环境变量
7、数组:
# 为数组赋值
#显示数组中所有值方法一
$echo ${a[*]}
#显示数组中所有值方法二
$echo ${a[@]}
#为数组添加数据项
#为数组b赋值 记住是小括号,不是大括号


#为数组赋值 #打印出数组中所有值

数组d[7]测试:

显示赋值:
echo ${a[1]}取出数组中所有的值:
echo ${a[@]} 或者echo ${a[*]}
取得数组元素的个数:
echo ${#a[@]} 或者 echo ${#a[*]}

数组元素及个数:
8.高级变量

测试变量不存在或为空,传回一个默认值
${myname:-'nick'} 如果待测变量不存在或为空,传回-后的值,存在则传回变量的值
赋值给变量chen:



$((算术式))算术扩展:
----借鉴:
1 2 3 4 5 6 7 8 | #定义变量[root@lovelace 51cto]# myname=lovelace#取得变量字符串从第三个字符开始到字符串结尾的所有字符[root@lovelace 51cto]# echo ${myname:3}elace#取得变量字符串中从第四个字符开始,长度为2的字符[root@lovelace 51cto]# echo ${myname:4:2}la |
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash#Verson:0.1#Auther:lovelace#Pragram:test argument#取得程序名echo $0#取得变量的所有值echo ${@:1}#取得变量的个数echo $# |
1 2 3 4 | [root@lovelace 51cto]# ./argument.sh 12 32 45./argument.sh12 32 453 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@lovelace 51cto]# echo $mynamelovelace#使用${#变量名}取得字符串长度 比较常用[root@lovelace 51cto]# echo ${#myname}8#使用${expr length “$变量名”}取得字符串长度[root@lovelace 51cto]# len=$(expr length "$myname")[root@lovelace 51cto]# echo $len8#使用${expr “$变量名” : '.*'}取得字符串长度[root@lovelace 51cto]# len=$(expr "$myname" : '.*')[root@lovelace 51cto]# echo $len8 |
1 2 3 4 5 6 7 8 9 10 11 | #定义一个变量[root@lovelace 51cto]# path=$(pwd)#查看变量值[root@lovelace 51cto]# echo $path/home/scripts/51cto#使用对比样式[root@lovelace 51cto]# echo ${path#*/}home/scripts/51cto#此对比样式可以取得目录名[root@lovelace 51cto]# echo ${path##/*/}51cto |
1 2 3 4 5 | #使用此对比样式可以取得路径名[root@lovelace 51cto]# echo ${path%/*}/home/scripts#使用此对比样式没有任何数据输出[root@lovelace 51cto]# echo ${path%%/*} |
1 2 3 4 5 6 7 8 9 | #定义一个变量[root@lovelace 51cto]# echo $mynamelovelace#替换第一次出现的l为F[root@lovelace 51cto]# echo ${myname/l/F}Fovelace#替换字符串中所有l为F[root@lovelace 51cto]# echo ${myname//l/F}FoveFace |
1 2 3 4 5 6 7 8 9 | #定义一个变量获取IP地址相关的信息[root@lovelace 51cto]# tmp=$(ifconfig eth0 | grep 'inet addr')#删除对比样式成功的字符串 然后赋值给变量r[root@lovelace 51cto]# r=${tmp/inet addr:/}#删除对比样式成功的字符串 然后赋值给变量ip[root@lovelace 51cto]# ip=${r/ Bcast*/}#打印出变量ip 查看是不是我们想要的结果[root@lovelace 51cto]# echo $ip192.168.2.54 |
1 2 3 4 5 | [root@lovelace 51cto]# myname=lovelace;mytest=51cto[root@lovelace 51cto]# echo ${!my@}myname mytest[root@lovelace 51cto]# echo ${!my*}myname mytest |
1 2 3 4 5 6 | #取得数组a的所有值[root@lovelace 51cto]# echo ${a[@]}hello 2 3 nick#取得数组a的索引项[root@lovelace 51cto]# echo ${!a[@]}0 1 2 3 |
