1、变量的定义(常见3种方式)
变量名必须以字母或下划线开头,其他字符是字母、数字或下划线
linux命令是区分大小写的,因此变量名也区分大小写
1)直接赋值
var=value =先后无空格
由于命令行中命令名、选项、参数默认是空白符(单个,多个空格或单个,多个tab制表符)分隔的,
若是=先后有空格,var = value会被认为是命令,shell执行时会报错:-bash: var: command not foundlinux
2)read读取
read var 经过键盘输入。通常使用 read -p "提示信息" var
read var < filename 文件输入重定向。通常用于while循环读取文件内容shell
3)变量替换或命令替换
变量替换 var=${other_var} 此处是定义变量var,other_var是被引用,引用变量需使用$,为加强可读性变量名使用{}括起
命令替换 var=$(command) 或 var=`command` 使用$()或反引号括住须要执行的命令bash
注:变量定义通常使用双引号括住变量值,如var="value",查看自定义变量set,取消变量unset var_name编辑器
2、变量的引用
要使用一个变量的值,只需在变量名前面加一个$,如echo "$var"
为加强可读性,再使用{}括住变量,如echo "${var}"测试
3、特殊变量(位置变量)
$0 当前运行程序的名称
$n n为从1开始,$1是第一个参数,$2是第二个参数…以此类推。第10个及其之后变量使用${10},${11}...
$# 传入脚本的参数的个数
$? 上一个命令的返回值,若是上一个命令成功执行则$?的值为0,不然为其余非零值
$$ 当前进程的pid
$! 后台运行的最后一个进程的pid
$* 全部的位置参数(总体做为单个字符串)
$@ 全部的位置参数(每一个做为独立字符串)命令行
4、使用变量的常见形式
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]#qt
5、常见的环境变量
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]#