首页 > 代码库 > bash变量
bash变量
bash中的变量的种类
根据变量的生效范围等标准
- 本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;
- 环境变量:生效范围为当前shell进程及其子进程;
- 局部变量:生效范围为当前shell进程中某代码片断(通常指函数);
- 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;
- 特殊变量:$?, $0, $*, $@, $#,$n,$$
一、本地变量
1.变量赋值:name=‘value‘
value可以使用引用:
(1) 可以是直接字串; name="username"
(2) 变量引用:name="$username"
(3) 命令引用:name=`COMMAND`, name=$(COMMAND)
2.变量引用:${name}, $name
"":弱引用,其中的变量引用会被替换为变量值;
‘‘:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;
3.显示变量:
set
4.销毁变量:
unset name
1 [root@cl ~]# myUrl="https://i.cnblogs.com/EditPosts.aspx?opt=1" 2 [root@cl ~]# echo ${myUrl} 3 https://i.cnblogs.com/EditPosts.aspx?opt=1 4 [root@cl ~]# echo $myUrl 5 https://i.cnblogs.com/EditPosts.aspx?opt=1 6 [root@cl ~]# set | grep myUrl 7 myUrl=‘https://i.cnblogs.com/EditPosts.aspx?opt=1‘ 8 [root@cl ~]# unset myUrl 9 [root@cl ~]# set | grep myUrl 10 _=myUrl
二、环境变量
1.变量赋值:
export name=VALUE
declare -x name=VALUE
$name, ${name}
3.显示所有环境变量:
export
env
printenv
4.销毁:
unset name
note:bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1 (不能用这些变量名)
note:推荐给所有变量加上花括号${name}
三、变量命名法则:
1、不能使程序中的保留字:例如if, for;
2、只能使用数字、字母及下划线,且不能以数字开头;
3、变量和=之间不能有空格;
4、见名知义。
只读变量:
readonly name
declare -r name
note:变量被删除后不能再次使用;unset 命令不能删除只读变量。
四、特殊变量
参数 | 说明 |
$0 | 当前脚本的文件名。 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$# | 传递给脚本或函数的参数个数。 |
$$ | 脚本运行的当前进程ID号 。 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$! | 后台运行的最后一个进程的ID号 |
位置变量:
在脚本代码中调用通过命令行传递给脚本的参数;
$1, $2, ...:对应调用第1、第2等参数;
示例:
创建脚本:
1 [root@cl bin]# vim test.sh 2 #!/bin/bash 3 #author:Fox_Chen 4 5 echo "File Name: $0" 6 echo "第一个参数为:$1" 7 echo "第二个参数为:$2" 8 echo "第三个参数为:$3" 9 echo "Quoted Values: $@" 10 echo "Quoted Values: $*" 11 echo "Total Number of Parameters : $#"
授权及检查:
1 [root@cl bin]# chmod +x test.sh 2 [root@cl bin]# bash -n test.sh
执行脚本:
1 [root@cl bin]# ./test.sh {a..d} 2 File Name: ./test.sh 3 第一个参数为:a 4 第二个参数为:b 5 第三个参数为:c 6 Quoted Values: a b c d 7 Quoted Values: a b c d 8 Total Number of Parameters : 4
note:$*和$@
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
示例:判断给出的文件的行数
1 #!/bin/bash 2 linecount="$(wc -l $1| cut -d‘ ‘ -f1)" 3 echo "$1 has $linecount lines."
bash变量