linux shell 临时变量吗,搞懂Linux Shell中的变量

如何在Bash中合理的设置变量

Bash中变量的设置

环境变量和自定义变量

几个重要的环境变量

从键盘获取变量的值

定义变量declare

变量内容的变更

变量内容的删除

变量内容的替换

变量的默认值替换设置

更多的变量替换设置方式

Bash中变量的设置

变量与变量内容以一个等号“=”来连接;

variable=ABC

等号两边不能直接接空格;

变量名称只能是英文字母与数字组合,且开头字符不能是数字

变量内容如果有空格符,可以使用双引号或者单引号将变量内容包起来;

variable="I like you"

双引号包起来的变量内容和单引号包起来的变量内容有一些区别,双引号内的特殊字符如 $ 等可以保有原来的特性; 单引号内的特殊字符则只能为一般字符;

variable1="language is $LANG"

variable2='language is $LANG'

如果显示变量 echo $variable1 ,则会得到:

"language is en_US"

如果显示变量 echo $variable2 ,则会得到:

'language is $LANG'

可以使用转义符号“\”将特殊符号如[Enter]、$、\ 、空格符等变成一般的字符;

在一串命令中,如果还需要通过其他命令提供的信息,可以使用反单引号(数字1左边 的那个键)“`命令`”或“$(命令)”;

version=`uname -r`

echo version# 可以得到当前系统内核的版本号,如我的就是“5.7.4-arch1-1”

version=$(uname -r)

echo version# 这两种方法是相同的,得到的结果一样

如果你想给一个变量累加变量内容时,可以使用“"$变量名称"”或“${变量名称}”累加内容,如我们想在上面的version这个变量中后面再追加一些内容;

version="$version"hahahahah

这时,变量就会在后面累加“hahahahah”

echo $version

会得到:“5.7.4-arch1-1hahahahah”

version=${version}hahahahah 是一样的效果

值得注意的一点是,PATH这个变量比较特殊,在累加路径的时候,不加双引号也是可以的,如

PATH=$PATH:/home/bin

PATH=${PATH}:/home/bin

PATH=$"PATH":/home/bin

都可以在原本的变量内容后面累加自定义内容。

如果该变量需要在其他子进程中执行,则需要以export来使变量变成环境变量;

export PATH

如果没有这一步,那么定义的变量就只能在当前这个shell中使用,在该shell的子进程(在当前shell下,打开一个新的shell,那么那个新的shell就是当前shell的子进程)中就无法使用,但是通过export命令可以将该变量变为环境变量,这样的话,子进程也就可以使用当前shell定义的变量了。

通常大写字符为系统默认变量,自行设置的变量可以使用小写字符,方便判断,当然,这个是习惯问题,你也喜欢大写,也无伤大雅;

取消变量的方法是使用“unset 变量名称”,例如取消上面的version变量:

unset version

取消变量的设置之后,你再echo显示的话,发现version这个变量已经是个空的了。

环境变量和自定义变量

通过 env 这个命令来查看当前运行环境的环境变量,它会列出所有的环境变量。

通过 set 这个命令来查看所有的变量,它会列出环境变量和自定义变量。

通过 export 将自定义变量变为环境变量,也就是子进程可以用的变量。

几个重要的环境变量

变量名

代表的含义

HOME

代表当前用户的主文件夹

SHELL

当前这个操作环境使用的shell,Linux默认是/bin/bash

HISTSIZE

命令执行历史记录条目数

MAIL

当前用户的邮件信箱文件夹路径

PATH

执行文件查找路径,目录间以冒号分隔

LANG

语系数据,也就是终端显示的语言编码相关的内容

RANDOM

随机数生成器,生成0~32768之间的一个随机数

[小案例] 生成一个0~9之间的随机数怎么搞?

# 使用declare来声明数值类型

declare -i number=$RANDOM*10/32768 ; ehco $number

从键盘获取变量的值

read命令

-p 后面引号内接提示信息

-t 后面接时间,单位秒,等待时间到了之后,进行下一步操作,不会长时间等待用户

定义变量declare

declare 的几个参数

-:给变量设置类型属性

+:取消变量的类型属性

-a: 将变量定义为数组类型(array)

-i: 将变量定义为整数数字类型(integer)

-r: 将变量定义为只读类型,不可更改内容,也不能重设

-x: 将变量定义为环境变量

变量内容的变更

变量内容的删除

变量内容的删除分为从前往后删除和从后往前删除; 其中,从前往后删除有两种情况:

从头删除到第一个匹配项 ${变量名#要删除的部分}

从头删除到最后一个匹配项 ${变量名##要删除的部分}

所以两者的区别就是一个“#”和两个“#”。

案例:

# 先获取我们的PATH变量到一个我们的自定义变量,毕竟PATH这个变量不能随便改

abc=${PATH}

echo $abc

/root/.gem/ruby/2.6.0/bin:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 从头开始删除,一直到第一个匹配项

echo ${abc#/*bin:}

/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 看,删除了 /root/.gem/ruby/2.6.0/bin:

# 从头开始删除,一直到最后一个匹配项

echo ${abc##/*bin:}

/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 看,删除了/root/.gem/ruby/2.6.0/bin:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:

从后往前删除也分为两种情况,跟前面的从前往后删除是一样的道理:

从头删除到第一个匹配项 ${变量名%要删除的部分}

从头删除到最后一个匹配项 ${变量名%%要删除的部分}

所以两者的区别就是一个“%”和两个“%”。

案例:

# 先获取我们的PATH变量到一个我们的自定义变量,毕竟PATH这个变量不能随便改

abc=${PATH}

echo $abc

/root/.gem/ruby/2.6.0/bin:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 从后往前删除,且只删除到第一个匹配项

echo ${abc%:/*bin*}

/root/.gem/ruby/2.6.0/bin:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl

# 看,删除了:/usr/bin/core_perl

echo ${abc%%:/*bin*}

/root/.gem/ruby/2.6.0/bin

# 看,删除了:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl

变量内容的替换

变量内容的替换主要是由“/”这个符号来完成的。

共分为两种情况,一种是替换从左往右第一个匹配项,另一种是替换所有的匹配项:

从左往右替换第一个匹配项 ${变量名/匹配项(旧内容)/要替换成的新内容}

从头删除到最后一个匹配项 ${变量名//匹配项(旧内容)/要替换成的新内容}

所以两者的区别就是一个“/”和两个“/”。

案例:

# 先获取我们的PATH变量到一个我们的自定义变量,毕竟PATH这个变量不能随便改

abc=${PATH}

echo $abc

/root/.gem/ruby/2.6.0/bin:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 替换第一个匹配项

echo ${abc/bin/BIN}

/root/.gem/ruby/2.6.0/BIN:/opt/nvim-linux64/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# 看,只有第一个bin被替换为了大写的BIN

# 替换所有的bin为BIN

echo ${abc//bin/BIN}

/root/.gem/ruby/2.6.0/BIN:/opt/nvim-linux64/BIN:/usr/local/sBIN:/usr/local/BIN:/usr/BIN:/usr/lib/jvm/default/BIN:/usr/BIN/site_perl:/usr/BIN/vendor_perl:/usr/BIN/core_perl

# 看,所有的bin都被替换为了大写的BIN

变量的默认值替换设置

有些情况下,在给一个变量赋值时,需要先判断该变量是否存在,或者该变量是否已经被设置为了空字符串。

判断该变量是否还未设置,如果还未设置就赋给默认值

变量名=${变量名-默认值}

判断该变量是否还未设置或者已经被设置为了空字符串,如果符合以上两种情况就给其设置默认值。

变量名=${变量名:-默认值}

第二种虽然只是在“-”号前面多了一个冒号“:”,但是两者的区别还是相当大的,所以要结合实际情况使用。

案例:

echo $aname

#输出空行,因为aname没有被设置过

aname=${aname-goodguy}

echo $aname

goodguy

# 看,由于aname是未设置的空变量,所以它被设置了制定的默认值

# bname已经被设置了值,即它不是空的变量

bname=badguy

echo $bname

badguy

bname=${bname-goodguy}# 设置如果bname为空变量,则默认值为goodguy

echo $bname

badguy

# 看,因为bname已经被设置了badguy这个值,所以默认值不会生效。

# 但是,上面的情况,aname被赋予默认值是因为aname没有被设置,而当你echo aname时显示

# 空行的话,还有一种情况,那就是aname被赋予了空字符串,即aname="",这种情况下,使用上面的

# 方法是无法给aname赋予默认值的,因为系统认为aname被设置过了。

# 这个时候,就需要“:”出场了。

cname=""

# cname被设置为了空字符串

echo $cname

# 显示空行,因为cname是空字符串,是看不见的

cname=${cname-goodguy}# 使用上面的方法赋值

echo $cname

# 还是显示空行,因为上面的方法无法给已经设置了空字符串的变量赋予默认值

# 再来试试第二个方法

cname=${cname:-goodguy}

echo $cname

goodguy

# 看,cname被成功的赋予了默认的值,即使它已经被赋予了一个空的字符串

更多的变量替换设置方式

变量的设置方式

str没有设置

str为空字符串

str已设置为非空字符串

var=${str-xxx}

var=xxx

var=

var=$str

var=${str:-xxx}

var=xxx

var=xxx

var=$str

var=${str+xxx}

var=

var=xxx

var=xxx

var=${str:+xxx}

var=

var=

var=xxx

var=${str=xxx}

str=xxx; var=xxx

str不变; var=

str不变; var=$str

var=${str:=xxx}

str=xxx; var=xxx

str=xxx; var=xxx

str不变; var=$str

var=${str?xxx}

xxx输出到stderr

var=

var=str

var=${str:?xxx}

xxx输出到stderr

xxx输出到stderr

var=str

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linuxshell脚本变量赋值使用"="号,如:x=10。变量的值可以是数字、字符串或者其他类型。变量名通常为字母或下划线开头,后面可以跟字母、数字或下划线,但不应该以数字开头。使用变量时需要在变量名前加"$"符号,如:echo $x。可以通过环境变量或命令行参数来设置变量的初始值。 ### 回答2: 在使用Linux系统时,我们经常需要编写一些自动化脚本来处理一些任务。而编写脚本时,变量赋值是常见的操作。Linuxshell脚本语言是一种解释型脚本语言,它不需要编译,在运行时会直接解释执行脚本文件的代码。 在shell脚本,我们可以通过“=”来将一个值赋给一个变量变量名和值之间需要有空格。例如: ``` num=10 ``` 在这个例子,我们定义了一个变量num,并将值10赋给它。 另外,在shell脚本,我们还可以将命令的执行结果赋值给一个变量,使用反引号``或$()将命令括起来即可。例如: ``` date=`date +%Y-%m-%d` echo $date ``` 在这个例子,我们利用date命令获取当前日期,并将它赋值给变量date。我们利用echo命令输出date的值,可以看到输出结果是当前的日期,例如2022-01-05。 需要注意的是,在Linuxshell脚本变量的命名需遵守一定的规则。变量名只能由字母、数字和下划线组成,且变量名不能以数字开头。另外,变量名区分大小写。 在使用变量时,我们可以通过在变量名前加上$符号来引用变量,例如: ``` num=10 echo $num ``` 在这个例子,我们在echo命令引用了变量num,输出结果是10。 除了普通变量赋值,shell脚本还支持一些特殊的变量,例如: 1. $0 表示当前脚本的文件名 2. $1-$9 表示调用脚本时传入的参数1-9 3. $# 表示传递给脚本的参数个数 4. $* 或 $@ 表示所有参数,以空格分隔 5. $? 表示上一条命令的执行结果,0表示执行成功,非0表示执行失败 总之,在shell脚本变量赋值是一个基础且常见的操作,了解如何使用变量赋值是编写实用而高效的脚本的前提。 ### 回答3: Linux Shell脚本语言变量赋值是非常重要的一个概念。变量是一种存储和处理数据的方式,它可以保存各种类型的数据,例如字符串、数字、对象等。在Shell脚本变量的用途是十分广泛的,它们可以用于存放命令行参数、环境变量、脚本内部计算使用的值等。 Shell变量赋值可以通过多种方式实现,包括直接赋值、命令替换、算术运算等等。下面通过一些例子来介绍不同情况下的变量赋值操作。 1. 直接赋值 在Shell脚本变量可以通过直接赋值的方式来定义和修改。直接赋值符号是“=”,等号两侧的空格可以省略,但建议在等号两侧添加一个空格,以提高代码的可读性。 例如: ``` # 直接赋值字符串 name='John' age=18 # 直接赋值数字 num=100 # 直接赋值布尔值 flag=true ``` 2. 命令替换方式 在Shell脚本,可以通过命令替换的方式将命令的输出结果保存到变量。命令替换的格式是“$(command)”或者是“`command`”。 例如: ``` # 将命令执行的结果保存到变量 current_path=$(pwd) echo "当前所在目录:$current_path" # 命令替换也可以嵌套 folder_name=$(ls -l $(pwd) | grep '^d' | awk '{print $9}') echo "当前目录下第一个子目录:$folder_name" ``` 3. 算术运算 在Shell脚本,可以通过将数值型变量和算术运算符一起使用来进行算术计算,并将结果存储到变量。算术运算符包括加减乘除、取模和自增自减等。 例如: ``` # 算术运算实例 a=10 b=20 c=`expr $a + $b` echo "a + b = $c" d=`expr $a \* $b` echo "a * b = $d" e=`expr $b % $a` echo "b % a = $e" f=10 g=20 f=$((f++)) g=$((--g)) echo "f++ = $f, --g = $g" ``` 总之,在Linux Shell脚本变量的赋值是非常常见和重要的操作,掌握不同的赋值方式和技巧,可以让脚本编写更为灵活和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值