首页 > 代码库 > 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变量