⑴ shell脚本里面怎么在字符串中引用变量
单引号里 $ 符号会被当成普通字符串,而不会引用其变量值。你应该用双引号,如:"xxxx${abc}xxxx"
⑵ shell脚本中单引号和双引号的区别
在linux操作系统上编写shell脚本时候,我们是在变量的前面使用$符号来获取该变量的值,通常在脚本中使用”$param”这种带双引号的格式,但也有出现使用'$param'这种带引号的使用的场景,首先大家看一段例子:
复制代码代码如下:
[root@linux
~]#
name=tektea
[root@linux
~]#
echo
$name
tektea
[root@linux
~]#
sayhello=”hello
$name”
[root@linux
~]#
echo
$sayhello
hello
tektea
[root@linux
~]#
sayhello='hello
$name'
[root@linux
~]#
echo
$sayhello
hello
$name
发现了吗?没错!使用了单引号的时候,那
$name将失去原有的变量内容,仅为一般字符的显示型态而已!这里必需要特别小心在意!
所以,单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符,而不会有特殊符号,我们也可以这里理解:'$sayhello'
与
“\$sayhello”是相同的。
在shell脚本开发过程中,针对变量的单引号(‘)和双引号(“)都是有应用场景的,根据我的经验总结起来就是:
1.
获取变量值的时候就使用双引号(“),这是基本用法。
2.
如果是在脚本中要编写一个新的脚本,同时这个新的脚本中还需要包含变量,你就可以选择使用单引号(‘)了,特别是生成一个临时的expect脚本时,单引号(‘)就会经常使用到的。
⑶ 如何在shell脚本中使用变量
在网络中 搜索 linux 系统中使用变量 关键词 ,有问题网络。 下面是我查的示例。
显示环境变量HOME
$ echo $HOME
/home/redbooks
2. 设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
Hello!
3. 使用env命令显示所有的环境变量
$ env
HOSTNAME=redbooks.safe.org
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
...
4. 使用set命令显示所有本地定义的Shell变量
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...
5. 使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$ unset $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了
6. 使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable
环境变量的设置位于/etc/profile文件
如果需要增加新的环境变量可以添加下属行
export path=$path:/path1:/path2:/pahtN
-----------------------------------------------------------------------------------------------------------------------
1.Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1.1 永久的:需要修改配置文件,变量永久生效。
1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。
2.设置变量的三种方法
2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。
2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
3.环境变量的查看
3.1 使用echo命令查看单个环境变量。例如:
echo $PATH
3.2 使用env查看所有环境变量。例如:
env
3.3 使用set查看所有本地定义的环境变量。
unset可以删除指定的环境变量。
4.常用的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE历史记录数
LOGNAME 当前用户的登录名
HOSTNAME指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL当前用户的邮件存放目录
PS1基本提示符,对于root用户是#,对于普通用户是$
⑷ Shell之环境变量、局部变量
变量可分为两类:
环境变量又被称为全局变量,可以在创建的shell以及任意子进程shell中使用。局部变量只能在创建的shell脚本中使用。
环境变量用于定义Shell的运行环境,保证Shell命令的正确执行,Shell通过环境变量来确定登录的用户名、登录目录等。所有的环境变量都是系统的全局变量,可用于所有的子进程中。
环境变量可以在命令行中设置,但用户退出后这些变量值也会随之丢失,所以最好在下面的文件或者目录中配置,每次用户登录都将会被初始化:
环境变量可用在任意的Shell进程中,环境变量名一般大写,并且是已经使用export内置命令进行了导出。比如HOME、PATH、UID、USER等,在用户登陆之前已经本/bin/login程序设置好了。
下面是常见的系统环境变量:
更多详情请通过env命令查看:
如果设置想自己设置环境变量,有临时生效和永久生效两种:
在.bash_profile或者/etc/profile文件中使用export导出变量,然后使用"."或者source命令使其生效。
系统的内置的环境变量或者自定义的环境变量可以通过echo或者printf进行打印:
对于有哪些变量使用env(上述已经说过)或者set命令:
使用unset取消变量,不要随意使用,尤其是系统环境变量:
局部变量的生命周期是当前的Shell脚本,如果启动另一个Shell进程或者退出当前Shell进程,变量就会丢失。
局部变量又三种定义方式:
变量名一般以字母、数字、下划线组成,其中以字母开头。
为了更好的说明上面定义的三种方式,即不加引号、加单引号、加双引号的区别,以下面的例子说明:
上述a、b、c输出为:
在上面的基础上如果变成下面的例子:
a、b、c的输出有时什么呢?
从上面的例子中可以看出第一种定义a变量的方式(不带引号),内容一般为简单连续的数字、字符串等;第二种定义b变量的方式(单引号)所见即所得,内容原样输出;第三种定义c变量的方式(双引号),输出变量时引号中变量会经过解析后输出。
所以,脚本中单纯的数字可以不使用引号,但是其它普通字符串尽量使用双引号。
系列教程:
Python虚拟环境搭建-学习视频教程-腾讯课堂ke.qq.com
⑸ Shell基本脚本命令使用教程
1、本地变量:用户私有变量,只有本用户可以访问,保存在家目录的 .bash_profile、.bashrc文件中
2、全局变量:所有用户都可以使用,保存在 /etc/profile 文件中
3、用户自定义变量:用户自定义,比如脚本中的变量
定义变量格式: 变量名=值 (=两边不能有空格)
字符串用单引号或者双引号引起来
shell支持正则表达式的常见命令:grep、sed、awk。
sed 是一个行(流)编辑器,非交互式的对文件内容进行增删改查操作
awk 能够集过滤、提取、运算为一体,它的工作方式是读取数据,将每一行数据视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值。平行命令还有 gawk、pgawk、dgawk。
⑹ shell脚本变量的定义与赋值
定义变量
Shell 支持以下三种定义变量的方式:
variable=value
variable='value'
variable="value"
variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。
注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
Shell 变量的命名规范和大部分编程语言都一样:
变量名由数字、字母、下划线组成;
必须以字母或者下划线开头;
不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。
变量定义举例:
url=http://c.biancheng.net/shell/
echo $url
name='C语言中文网'
echo $name
author="严长生"
echo $author
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:
author="严长生"
echo $author
echo ${author}
变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
skill="Java"
echo "I am good at ${skill}Script"
如果不给 skill 变量加花括号,写成echo "I am good at $skillScript",解释器就会把 $skillScript 当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号{ },这是个良好的编程习惯。
修改变量的值
已定义的变量,可以被重新赋值,如:
纯文本复制
url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/shell/"
echo ${url}
第二次对变量赋值时不能在变量名前加$,只有在使用变量时才能加$。