1.shell中取变量的值

   A。$i  B${i}

区别:如果变量的名称后跟其他英文单词,字母或者底线,需用{}隔开$与变量名称。eg:

 

anhe@ubuntu:~$ name='colive'

anhe@ubuntu:~$ echo $name

colive

anhe@ubuntu:~$ echo ${name}

colive

anhe@ubuntu:~$ echo $name_anhe #空白,因为name_anhe没有赋值

anhe@ubuntu:~$ echo ${name}_anhe #可以

colive_anhe

2.取消和清空变量

使用unset,unset -v #取消的是变量 unset -f #取消的是函数

3.anhe@ubuntu:~$ name=anhe

anhe@ubuntu:~$ echo 'my name is $name'

my name is $name

anhe@ubuntu:~$ echo "my name is $name"

my name is anhe

anhe@ubuntu:~$ 

单引号的作用是形成一个所见即所得的字符串,不会进行任何替换变量的结果,但是双引号会替换变量。
4.定义环境变量
变量的作用范围,仅在各自的shell环境中才有效。
export name="colive"或者
#name="colive"
#export name
或者
#declare -x name=“colive”一样可以把某一个变量定义为环境变量
5.readonly -f *** #定义只读函数
 readonly -a #定义只读数组变量
anhe@ubuntu:~$ a[0]=2
anhe@ubuntu:~$ a[1]=5
anhe@ubuntu:~$ a[2]=0
anhe@ubuntu:~$ readonly  -a a
anhe@ubuntu:~$ a[1]=4
bash: a: 只读变量
6.数组,bash仅支持一维数组
欲读取数组值 ${数组名[索引值]}
一次读取数组所有值${数组名[@]}
读取数组元素的个数${#数组名[@]}或${#数组名[*]}
7.#! /bin/bash与 #! /bin/sh
执行script (使用 #!/bin/bash)不调用.bash_profile,.bashrc但会检查BASH_ENV的内容,如果为非空,则执行它指定的启动文件
执行script (使用 #!/bin/sh)不调用任何启动文件,没有其他检查环境变量的操作。

 8.变量扩展:取字符串切片,字符串长度

A。 ${变量:位置起点} eg: 

name="colive_an"

myname=${name:3}

ive_an

B。 ${变量:位置起点:长度}

C。 ${@:1} 由起点开始,取得后面所有的位置参数

D。 ${@:n}由第n个开始,取得后面所有的位置参数

E。 ${@:起点位置:个数} 由起点开始,取得指定个数的位置参数

F。 ${#变量名称} 传回变量值的字符串长度

 

G。 ${变量#样式}由前面对比,删除最短的/。eg

 # filename=/usr/bin/neton

 

# r=${filename#/*/}

# echo $r

bin/neton

 

 H。 ${变量##样式}由前面对比,删除最长的

 

# filename=/usr/bin/neton

# r=${filename##/*/}

# echo $r

#neton

I。 ${变量%样式} 由后面对比,删除最短的

J。 ${变量%样式} 从后面对比,删除最长的

K。 ${变量/样式/}  把对比符合的字符串删除一个 

 # filename=/usr/bin/neton

# r=${filename/bin/}

# echo $r

 

/usr//neton

 

L。 ${变量//样式/}  把对比符合的字符串都删除

 # filename=/usr/bin/neton

# r=${filename//bin/}

# echo $r

 

usrbinneton

M。 ${变量名/#模式/}  eg:

 

# filename='thx,this is colive'

# r=${filename/#t/}

# echo $r

hx,this is colive

从头开始,删除第一个与模式相符合的

N。 ${变量/%样式/}从尾开始删除第一个与样式相符合的。

9. 命令替换
DIR=$(ls)
echo $DIR的作用等于使用了ls