linux中变量的使用
学习Linux Shell变量时,你可能会遇到Shell变量如何使用的问题,这里将介绍本地变量以及环境变量等的使用。
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储shell脚本运行时可更改的程序信息。
一,各种变量
(1)本地变量
本地变量(也就是用户自定义变量)只能在当前SHELL环境下获得赋值,进入其他子SHELL就不能获得赋值了
(2)环境变量
环境变量时作用在全局的,也就是不管你怎么进子SHELL,也就是改变环境,环境变量都可以获得赋值。
export (对子shell有效)导出环境变量
例 :export $NAME
printenv 显示环境变量的值。
例:printenv Name
如果您指定 Name 参数,那么系统将只显示与 Name 参数相关联的值。如果不设置 Name 参数,printenv 命令显示当前环境,每行显示一个 Name=Value 序列。
如果指定一个没有在环境中定义的 Name 参数,printenv 命令返回退出状态 1;否则返回退出状态 0(零)。
env 允许您显示您的当前环境或者在一个被改变了的环境下运行一个指定的命令。
如果没有标志或者参数被指定,env 命令会显示您的当前环境,每行显示一个 Name=Value 对。
退出状态
0 env 成功完成。
1-125 在 env 命令中发生了一个错误。
126 由 Command 参数指定的命令被发现了,但是不能被调用。
127 由 Command 参数指定的命令未被发现。
(3)特殊变量(内部变量)
$0 shell或shell脚本的名字
$# 参数的个数
$_ 代表上一个命令的最后一个参数
$$ 代表所在命令的PID(pid就是进程id)
$! 代表最后执行的后台命令的PID
$? 0表示成功 1-255不成功
例:编写脚本script1.sh
#!/bin/bash
echo “Number of parameters is:” $#
echo “Program name is:” $0
echo “Parameters is:” $*
执行:./script1.sh xiaoming daniu
结果:Number of parameters is:2
Program name is:script1.sh
Parameters is:xiaoming daniu
(4)位置变量
在shell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1,2,3,…,这类变量称为位置变量。位置参数1存放在位置变量1中,位置参数2存放位置变量2中,……,在程序中可以使用$1,$2,……来访问。
$1 $2 $3 $数字 必须从1开始,命令行可以向脚本传递参数,并可以在脚本中调用
注:当位置变量个数超出9个时,就不能直接引用位置大于9的位置变量了,必须用shift命令移动位置参数。
shift [n]
(5)运算变量
$[$A+$B]或 $(($A+$B))或expr
EXINIT保存使用vi编辑器的初始化选项。
例:要显示行号,则如下:
EXINIT='set nu';export EXINIT
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
PATH 保存进行命令或脚本查找的目录顺序。可以在.profile中进行设置。
HOME 用于记录用户的主目录;
PS1=‘[\u@\h \w]\$’ 基名
IFS:用作shell指定的缺省域分隔符。
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 附属提示符,默认是“>”
二,变量的使用
(1) 例:当您在设置别名alias cdnet='cd /etc/sysconfig/network-scripts/',可您下次登录时就无法使用该别名
重启系统后均会失效,此时可以在一些文件中进行设置
此时您可在下面一些文件中进行设置,分为全局环境有效和局部环境有效
全局环境:/etc/profile /etc/profile,d/* /etc/bashrc
局部环境:~/.bash_profile ~/.bashrc ~/.bash_logout
(2)profile类:
设置环境变量
运行用户登录要执行的一些命令
bashrc类:
设置别名
设置本地变量
(3)然而shell又分为:交互式登录shell,非交互式登录shell
交互式登录shell时读取文件的顺序:
/etc/profile-->/etc/profile.d/*-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
非登录式shell时读取文件的顺序:
~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
例:需要设置cds='cd /usr/local/src'只对root有用
可以在root家目录下.bashrc设置
例:设置环境变量FAVORCOLOR对全局有效
在/etc/profile文件下设置export FAVORCOLOR=blue
或在/etc/profile.d/*下新建文件设置export FAVORCOLOR=blue
echo $FAVORCOLOR
立即生效 :source /etc/profile
或. /etc/profile
练习1:让用户登录进来时候,显示,hi,i know you,you are root!
可以在/etc/profile文件下设置echo "Hi,i know you,you are $LOGNAME!"
三,变量使用的技巧
(1)变量赋值时,等号左右不能有空格
(2)变量名称只能是字母与数字,且不能以数字开头
(3)若变量值存在空格,则必需以双引号或单引号包裹起来.
(4)对于特殊字符,单引号不能识别,而双引号可以识别
(5)"\"既可以作为跳转字符,也可以作为转义字符
(6)若变量要括增内容,应该使用双引号及$引用该变量
(7) 在一串指令中如果需要借助其他指令,可以使用`command`来嵌套(注意这里不是单引号,而是quote符号,也就是你的键盘上F1下面的那个按钮)
(8)取消变量使用unset
由于是刚刚学习,不免有不足之处,欢迎您的不吝赐教!
转载于:https://blog.51cto.com/kingshuo/622166
linux中变量的使用相关推荐
- Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义
1 2 3 4 5 6 7 8 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的 ...
- Linux中变量#,@,0,1,2,*,$$,$?的含义
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...
- 【Linux】Linux中变量#,@,0,1,2,*,$$,$?的解释
我们先写一个简单的脚本,执行以后再解释各个变量的意义 # touch variable # vi variable 脚本内容如下: #!/bin/sh echo "number:$#&quo ...
- Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
我们先写一个简单的脚本,执行以后再解释各个变量的意义 # touch variable # vi variable 脚本内容如下: #!/bin/sh echo "number:$#&quo ...
- 【转】Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
原文网址:http://dadekey.blog.51cto.com/107327/119938 我们先写一个简单的脚本,执行以后再解释各个变量的意义 # touch variable # vi va ...
- Linux中变量 #, @, 0, 1, 2, *,$$,$?的含义
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...
- Linux中变量#,@,0,1,2,*,$$,$?的意思
$# 是传给脚本的参数个数$0 是脚本本身的名字$1 是传递给该shell脚本的第一个参数$2 是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表$* 是以一个单字符串显示所有向脚本 ...
- linux一键分区脚本,【Shell】Linux中分区脚本
后天要中期答辩了,今天只刷了一个题,还没写出来,但是想更新博客,所以只有把之前写的东西贴出来了. 一个用于分区的shell脚本 1 #!/bin/bash #指定脚本解释器路径 2 echo &quo ...
- linux中分隔符IFS
在linux中IFS是分隔符的意思,linux中变量分两种,全局变量env和局部变量set,set中包含了env的全部变量,我们查看IFS的值发现env | grep IFS为空,而set | gre ...
最新文章
- 【Matlab与线性代数】Matlab中对数组元素引用方法总结
- 斯坦福重磅报告:2030年的人工智能与生活
- halcon的仿射变换算子的介绍
- java文件流读取异常_Java IO流的FileInputStream读取文件的问题,不同写法输出不一样...
- Golang 入门系列(十) mysql数据库的使用
- git怎么读_【杂谈】怎么使用有三AI完成系统性学习并赚钱
- 【程序猿必备】数据结构与算法精选面试题
- DEKR 解构式人体关键点回归(三):损失函数
- 如何在参考文献中优雅地引用URL?How do you get nicely formatted URLs in the bibliography?
- ONVIF、RTSP/RTP、FFMPEG的开发实录
- shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
- 数字高程信息30m分辨率SRTM DEM数据下载与拼接(ENVI)
- NOD32离线升级更新包使用方法
- [Jenkins]如何自动停止超时任务?
- java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
- thinkphp5实现评论回复功能
- 递归算法之求x的n次方
- 谷歌浏览器87版本 iframe_谷歌Chrome的“混合内容”更新将会影响电商网站,自建站卖家如何应对?...
- Maven从入门到精通
- c语言宏定义(c语言宏定义是什么意思)
热门文章
- activiti7在线流程设计器_springboot2.x集成activiti6.0在线流程设计器
- mysql怎么保证热点数据_MySQL里有2000w数据,redis中只存20w数据,如何保证redis中数据都是热点数据...
- 瀑布流布局的实现方式
- vscode 网页版
- 执行环境,作用域链,闭包
- java obj1 = obj2_无障碍assertEquals(Object obj1,Object obj2),想怎么比较就怎么比较!! [ 光影人像 东海陈光剑 的博客 ]...
- o00o0o php,PHP $O00OO0=urldecode eval 解密,记一次商业源码的去后门
- 20210424:力扣第237周周赛(下)
- 20200920:leetcode35周双周赛题解(上)
- 年薪50万的程序员_985程序员年薪50万,看似风光,但当事人却想转行