echo, 设置变量, 取消变量
- 可以通过
echo $var
的方式打印变量, 若系统中没有变量, 则不会打印任何东西 - 变量可以直接设置. 假设要设置myName的变量, 则可以这样写:
myName=Helloyong
myName
就是新设置的变量, 其变量内容是Helloyong
.
- 可以使用
unset
命令取消变量.
取消myName
的变量:
unset myName
变量的设置规则
- 变量和变量内容之间以等号链接, 且等号两边没有空格
- 变量名是不以数字开头的英文或者数字.
- 变量内容中的特殊字符, 若在单引号之间则为一般字符, 若在双引号之间则保持原有特性.
- 可以使用转义字符()对特殊符号进行转义.
- 使用反引号和
$(cmd)
可以执行命令.
环境变量
在终端使用env
命令查看环境变量, env
是environment
的缩写. 使用set命令查看所有变量(包括自定义变量)
常见的变量有HOME
,PATH
,LANG
等.
语系变量locale
使用locale可用来查询本机Linux支持的所有语系。加上参数a即可。
yw@yw-PC:~$ locale -a
C
C.UTF-8
en_US.utf8
POSIX
zh_CN.utf8
如果不加参数a, 可以查看设置
yw@yw-PC:~$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
当设置LANG或者LC_ALL时, 系统默认将其它未设置的语系变量被LANG或LC_ALL替代.
Linux中的语系文件放置在/usr/lib/locale目录中.
整体系统默认的语系定义在/etc/sysconfig/i18n中, 可以在这个文件修改你想要的语系.
变量键盘读取, 数组与声明, read, array, declare
read
使用read 可以读取用户的输入, 用法
read var
在命令行打入这个命令并回车后, 输入字符串, 这个字符串存储于var 这个变量中.
read 还有两个参数可以使用.
p: 后面可以接提示符
t: 等待用户输入的时间, 秒为单位
例如, 让用户在30s内输入一个名字:
yw@yw-PC:~$ read -p "Please input a name: " -t 30 name
Please input a name: Join
之后执行echo $name 这个命令会打印出Join
注意: 当我们退出当前的命令行时, name变量就会销毁.
在使用read时, 会进入子进程, 变量也就是定义在子进程中的. 当退出bash时, 子进程消失. 子进程中的变量也随之销毁. 如果想要称为全局变量, 则可以使用export命令.
declare/typeset
declare和typeset 的功能一样, 都是声明变量的类型. 系统默认声明的变量时字符串类型. 我们以declare为例. 用法如下:
declare var # 声明变量var
有以下参数设置变量的类型.
a: 将变量var设置为array类型
i: var为integer类型
x: var为环境变量(全局变量)
r: 只读类型, 不可更改也不可重设.
限制用户行为, ulimit
ulimit用于限制用户的行为, 用法如下:
ulimit [-SHacdfltu] <配额>
参数分别代表不同的属性, 配额就是属性值.
如, t表示使用cpu的最长时间(秒), 设置其为30s:
ulimit -t 30
其他参数含义如下:
S: 警告设置, 超过此值会有警告信息
H: 严格设置, 不能超过此值
a: 列出所有设置及其值
f: 此shell可以创建的最大文件容量, 单位KB
d: 进程可以使用的最大断裂内存容量
l: 可用于锁定的内存量
u: 单一用户可以使用的最大进程数量
变量的删除, 替换
假设有变量var1, 如果想把var1的内容赋值给var2, 那么我们可以这样做:
var2=${var1}
再使用echo $var2命令会发现内容和var1的内容一样.
假如没有变量var1, 那么var2就不会被设置. 如果我们想这样做呢? 当设置了var1时, 就将var1的内容给var2, 如果没有设置var1, 则个var2一个默认值. 可以使用减号-
. 形如var2=${var1-content}
var2=${var1-"var2"}
此时, 当var1没有设置时, var2的值就是”var2”. 这会有一个小bug, 当我们的var1为空字符串时""
, 我们再执行上面的命令, var2的值也就是空字符串. 这并不是我们想要的. 如果我们想在var1为空时也将后面跟的内容赋值给var2, 可以在减号前面加上一个冒号:
var1=""
var2=${var1:-"var2"}
此时, var2的值为”var2”.
在var1和content之间还可以有其他符号, 如下表: (来源于鸟哥的linux私房菜)
变量内容的删除与替换
注意这个是变量内容的删除与替换.
变量内容的删除与替换使用如下语法: (来源于 鸟哥的linux私房菜)