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

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]#

相关文章
相关标签/搜索