您的位置:首页 > 运维架构 > Shell

shell编程基础(三)——shell变量

2016-06-08 15:06 477 查看
一、变量的定义(常见3种方式)
变量名必须以字母或下划线开头,其余字符是字母、数字或下划线
linux命令是区分大小写的,所以变量名也区分大小写
1)直接赋值
var=value =前后无空格
因为命令行中命令名、选项、参数默认是空白符(单个,多个空格或单个,多个tab制表符)分隔的,
如果=前后有空格,var = value会被认为是命令,shell执行时会报错:-bash: var: command not found

2)read读取
read var 通过键盘输入。一般使用 read -p "提示信息" var
read var < filename 文件输入重定向。一般用于while循环读取文件内容

3)变量替换或命令替换
变量替换 var=${other_var} 此处是定义变量var,other_var是被引用,引用变量需使用$,为增强可读性变量名使用{}括起
命令替换 var=$(command) 或 var=`command` 使用$()或反引号括住需要执行的命令

注:变量定义一般使用双引号括住变量值,如var="value",查看自定义变量set,取消变量unset var_name

二、变量的引用
要使用一个变量的值,只需在变量名前面加一个$,如echo "$var"
为增强可读性,再使用{}括住变量,如echo "${var}"

三、特殊变量(位置变量)
$0 当前运行程序的名称
$n n为从1开始,$1是第一个参数,$2是第二个参数…以此类推。第10个及其以后变量使用${10},${11}...
$# 传入脚本的参数的个数
$? 上一个命令的返回值,如果上一个命令成功执行则$?的值为0,否则为其他非零值
$$ 当前进程的pid
$! 后台运行的最后一个进程的pid
$* 所有的位置参数(整体作为单个字符串)
$@ 所有的位置参数(每个作为独立字符串)

四、使用变量的常见形式
1)获取变量值的长度,${#variable_name}
2)截取变量值:
${variable_name:start_index},返回值从start_index开始到值末尾,变量值的index从0开始
${variable_name:start_index:length},返回值从start_index开始,返回值长度为length
${var#key}:从前往后删除符合key最短的那一个
${var##key}:从前往后删除符合key最长的那一个
${var%key}:从后往前删除符合key最短的那一个
${var%%key}:从后往前删除符合key最长的那一个
3)替换变量值
${var/旧字符串/新字符串}:替换第一个满足条件的字符串
${var//旧字符串/新字符串}:替换所有满足条件的字符串
4)脚本中设置环境变量
环境变量会在当前进程及其子进程中使用。子进程可以获取父进程的环境变量,但不会获取自定义变量。子进程不能修改父进程环境变量。
export var=value

var=value
export var

注:查看环境变量使用env
5)其他
${var:-word} 若var存在且非空,则返回var的值,否则返回word。
用途:若变量未定义,则返回默认值
[root@mrhcatxq01 shell]# echo ${a:-bbb}
bbb
[root@mrhcatxq01 shell]# echo ${a}

[root@mrhcatxq01 shell]#
${var:=word} 若var存在且非空,则返回var的值,否则将其设值为word,然后返回其值
用途:若变量未定义,则设置变量为默认值
[root@mrhcatxq01 shell]# echo ${a:=ccc}
ccc
[root@mrhcatxq01 shell]# echo ${a}
ccc
[root@mrhcatxq01 shell]#
${var:?message} 若var存在且非空,返回var的值;否则打印message,并退出当前脚本。若message省略,shell返回parameter null or not set
用途:用于捕捉因变量未定义而导致的错误
[root@mrhcatxq01 shell]# echo ${b:?"hhhhhh"}
-bash: b: hhhhhh
${var:+word} 若var存在且非空,则返回word,否则返回null
用途:测试变量存在
[root@mrhcatxq01 shell]# b=aaa
[root@mrhcatxq01 shell]# echo ${b:+11}
11
[root@mrhcatxq01 shell]# echo ${c:+nnnnn}

[root@mrhcatxq01 shell]#

五、常见的环境变量
PATH 命令搜索路径,各个路径冒号分隔
[root@mrhcatxq01 shell]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
HOME 用户家目录路径名
EDITOR 默认编辑器
IFS 定义shell使用的分隔符
LOGNAME 用户登录名
SHELL shell路径名
PS1 主命令提示符,即登录系统命令行前的提示符,如:[root@mrhcatxq01 shell]#
PS2 二级命令提示符,命令未输入完,提示继续输入命令的提示符,如:
[root@mrhcatxq01 shell]# ls -\
>
PS4 调式命令提示符。使用set -x调式脚本时的提示符:
[root@mrhcatxq01 shell]# cat echo.sh
#!/bin/bash

set -x
echo "hello"
[root@mrhcatxq01 shell]# ./echo.sh
+ echo hello
hello
[root@mrhcatxq01 shell]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: