shell脚本的变量

版权声明:转载或者应用请注明出处 https://blog.csdn.net/qq_35180983/article/details/82501182

1、变量定义

定义变量时,变量名不加美元符号($,PHP语言中变量需要)

如:

    name="123"

注意:

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

同时,变量名的命名须遵循如下规则:

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字,set查找出来的也不用)

2、变量的赋值:

  • 显式地直接赋值(可以重复为变量赋值),如:name="你好"
  • 用语句给变量赋值,如:name=`expr 2 + 2`

注意:以上语句将 2 + 2的值给变量 ,注意其中的空格必须要有

3、使用变量(linux中的使用变量必须加$)

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

echo $name

echo ${name}

变量名外面的花括号是可选的,加不加都行。

加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

name="123"

echo "name$name"

[root@hadoop01 shell]# vi test.sh

#!/bin/bash
name="123"
echo "name$name"

[root@hadoop01 shell]# ./test.sh 
name123

4、只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

[root@hadoop01 shell]# vi test.sh

#!/bin/bash
name="123"
echo "name$name"
readonly name
name="43"

[root@hadoop01 shell]# ./test.sh 
name123
./test.sh: line 5: name: readonly variable

运行脚本,结果如下:

./test.sh: line 5: name: readonly variable

5、删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用。unset 命令不能删除只读变量。

实例:

[root@hadoop01 shell]# vi test.sh

#!/bin/bash
name="123"
unset name
echo "$name"

[root@hadoop01 shell]# ./test.sh  

以上实例执行将没有任何输出。

6、变量类型:(局部变量(常用)、环境变量)

运行shell时,会同时存在三种变量:

1) 局部变量 :自定义变量。局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

2) 环境变量, 该也称为系统变量。所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

可使用set命令查看:

[root@hadoop01 shell]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
CLASSPATH=.:/usr/java/jdk1.8.0_181-amd64/lib/tools.jar:/usr/java/jdk1.8.0_181-amd64/lib/dt.jar:/usr/java/jdk1.8.0_181-amd64jre/lib/rt.jar
COLORS=/etc/DIR_COLORS
COLUMNS=126
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=localhost:11.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=hadoop01
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LINES=21
LOGNAME=root
.......................

猜你喜欢

转载自blog.csdn.net/qq_35180983/article/details/82501182
今日推荐