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]#
变量名必须以字母或下划线开头,其余字符是字母、数字或下划线
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]#
相关文章推荐
- 提高xshell使用效率
- adb shell删除系统apk重新安装包
- Mac神器Iterm2的Shell Integration的用法和注意事项
- shell编程学习笔记【原创】
- shell脚本批量移动文件
- ubuntu在shell下用默认程序打开文件
- shell学习笔记
- Linux Shell系列教程之(八)Shell printf命令详解
- 通过ADB操作/查看SQLite数据库以及Mac OS X下adb shell配置与启动
- SQL to mongo Shell to C++
- Powershell日常AD管理-1
- 升级系统后,使用CocoaPod出现-bash: pod: command not found 解决办法
- Shell的环境变量配置文件
- 解决Bash On Ubuntu On Window安装Zsh无效问题附安装说明
- apt-get 基本
- Git使用总结(包含Git Bash和Git GUI的使用)
- Gnome Terminal,Xshell等终端模拟器中执行命令出现乱码问题解决
- Shell脚本: Mysql自动创建库和用户_20160607_七侠镇莫尛貝
- shell编程基础(二)
- Burpsuite截断上传拿webshell