变量
变量可大致分为4类:
局部变量、环境变量、位置变量和特殊变量
后两者是只读变量
无论何种变量,我们都可以对变量进行一系列变量操作。
${parameter}
返回变量值
${parameter-default}, ${parameter:-default}
测试变量是否设置,未设置则返回默认值,但变量不改变
${parameter+alt_value}, ${parameter:+alt_value}
测试变量是否设置,已设置则返回默认值,但变量不改变
${parameter=default}, ${parameter:=default}
测试变量是否设置,未设置则返回默认值,变量也改变
${parameter?err_msg}, ${parameter:?err_msg}
测试变量是否设置,未设置则打印报错信息
${#var}
获取变量长度
${var#Pattern}, ${var##Pattern}
变量不被修改。删除开头部分匹配pattern的部分,#最短匹配,##最长匹配
${var%Pattern}, ${var%%Pattern}
变量不被修改。删除结尾部分匹配pattern的部分,%最短匹配,%%最长匹配
${var:pos}
${var:pos:len}
变量截断,从cos开始,len长度的字符串
${var/Pattern/Replacement}
变量替换,首次出现patter的地方,替换成rep
${var//Pattern/Replacement}
变量替换,全局出现patter的地方,替换成rep
hiro@v-pc:~$ var="hello"
hiro@v-pc:~$ echo ${#var}
5
hiro@v-pc:~$ echo ${var:2}
llo
hiro@v-pc:~$ echo ${var:1:2}
el
hiro@v-pc:~$ echo ${var/ll/xx}
hexxo
hiro@v-pc:~$ echo ${var/l/x}
hexlo
hiro@v-pc:~$ echo ${var//l/x}
hexxo
hiro@v-pc:~$ echo ${var#*e}
llo
hiro@v-pc:~$ echo ${var%o}
hell
hiro@v-pc:~$ echo ${var:-world}
hello
hiro@v-pc:~$ echo ${var:+world}
world
变量类型
shell变量是没有类型的,但是也可以通过其他方式强加定义
declare/typeset命令可设置各种变量
-i integer
-r readonly 相当于readonly var
-a array 相当于
-f function
-x export
变量数组
bash和ksh有所不同
-
#!/usr/bin/bash
-
declare -a mon
-
mon=( Jan Feb Mar Apr )
-
-
-
echo ${#mon[*]}
-
echo ${mon[2]}
-
############ksh
-
#!/usr/bin/ksh
-
set -A mon -- Jan Feb Mar Apr
-
-
echo ${#mon[*]}
-
echo ${mon[2]}
局部变量
赋值即可
只有在当前进程中有用,一旦进入子进程。其会失效。
set 返回当前所有变量
unset 取消变量值
环境变量
环境变量是作为一个进程间通信的方式之一。
export可将变成提升为环境变量。
env返回当前所有环境变量
位置变量
$1 $2
根据位置返回参数和命令行
特殊变量
$* 将所有参数放入到一个变量中
$# 参数数量
$$ 返回当前进程号
$@ 将所有参数放入不同的引号中
$? 上次进程的返回值
$! 上次进程的进程号
环境
登陆过程中,linux完成一系列的操作。
验证用户名和密码,为用户开启登陆shell
随后加载profile,
从/etc/profile开始,到$HOME/.profile。每个Linux加载的东西可能有所不同,但是这两个文件必然会被加载,而其他文件是否会被加载可能已经在这里定义了。
可设置的东西
umask
PS1
PS2
TERM
ulimit
其他安全类的操作(例如验证用户登陆数)
.logout
文件在用户登出时可被调用
stty可用于终端设置
stty设置相应的操作对应于相应的文件符
stty -a 显示所有操作
stty -g 保存所有操作
stty action_name action_value 设置操作
引号
“”
可以引用除$,`和\以外的所有字符。但是shell遇到上述上个字符时,尝试解析变量等操作。
‘’
可以引用任何字符而不必进行解析
``
执行命令并返回结果,和$()功能相同
\
防止特殊字符被解析
阅读(1191) | 评论(0) | 转发(0) |