从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

linux--shell--变量

 

1.  变量

    bash中变量的值都是字符串

    分类:

        本地变量:当前shell有效

        环境变量:在所有由登录进程产生的子进程有效

        位置参数:只读,用于向shell脚本传递参数

 

 

2. 变量使用

2.1 变量替换、赋值

    变量替换即引用变量的值

va1=123
va2=${va1}

    值有空格则需要用双引号括起来。变量名和等号直接不能有空格、引用变量时大括号里不能有空格

 

    变量赋值模式:

        variable=value     value赋值给变量variable

        variable+value     对已赋值的变量,重设其值

        variable?value、variable:?value       对未赋值的变量显示系统错误信息

        variable:=value     对未赋值的变量,将value赋值给它

        variable:-value      对未赋值的变量,将value赋值给它,但value不存储到变量对应的地址空间

 

#!/bin/bash
a="123"
unset a
echo ${a:-"456"}   #输出 456
echo ${a}              #输出空行

unset a
echo ${a:="789"}   #输出 789
echo ${a}              #输出 789

 

 

2.2  清除变量

unset 变量名

 

2.3 只读变量

    设置为只读后,不能再更改其值

va1="3.14"
readonly va1

 

 

 

3. 环境变量

3.1 查看进程环境变量

cat /proc/pid/environ | tr '\0' '\n'

 

env   #查看当前进程环境变量

 

 

3.2 定义一个环境变量

MYPATH=XXX       #先赋值
export MYPATH    #声明为环境变量

 

3.3 重要环境变量

    相关文件: .bash_profile  、.bashrc、.bash_logout

 

(1)PWD、OLDPWD

 

(2)PATH

    

    增加新路径:/home/usr/bin

export PATH="${PATH}:/home/usr/bin"

    或

PATH="${PATH}:/home/usr/bin"
export PATH

 

(3)HOME

 

(4)SHELL、BASH

    默认shell

(5)USER、UID

    用户名、UID

(6)PPID

    当前进程的父进程进程号

(7)PS1、PS2

    提示符变量,用于设置提示符格式

 

(8)IFS

    shell域分隔符,默认空格

 

(9)BASH_SUBSHELL

 

(10)BASH_VERSINFO

        含6个元素,保存了bash的版本信息

#!/bin/bash
for i in {0..5}
do
  echo "BASH_VERSINFO[${i}]=${BASH_VERSINFO[${i}]}"
done

 

    BASH_VERSION :保存了BASH_VERSINFO的0到4的值

(11)DIRSTACK

        目录栈栈顶

(12)GROUPS

        当前用户所属群组

(13)

        HOSTNAME:主机名

        HOSTTYPE、MACHTYPE:硬件架构,同BASH_VERSINFO[5]

(14)REPLY

        read读取的标准输入存储到表里时,若没有带变量名,则读到的标准输入存储到REPLY变量

        对select命令(select循环),序号存储到REPLY变量

(15 )SECONDS

        记录脚本从开始执行到结束消耗的时间,单位秒

(16) SHELLOPTS

 

(17)SHLVL

        shell嵌套的层次

(18)TMOUT

        设置shell的过期时间

 

4. 位置参数

    表示命令行向shell脚本传递的参数

    $*、$@    表示全部参数

    $0             脚本名字

    ${10}         第10个参数

    $#              传递到脚本的参数数量

    $$              脚本运行的进程号

    $?              命令的退出状态。0,没有错误    非0,有错误

 

 

 

 

5.  引用

(1)

    将字符串用引用符号引起来,防止特殊字符被shell脚本解释为特殊意义。如$、*等有多个意义的字符。引用后特殊字符表现为字面意义

    双引号""      引用除  美元符$   反引号`   反斜线\  之外的所有字符

    单引号''       引用所有的字符

    反引号``      shell将反引号中内容解释为系统命令

    反斜线\        转义符

 

    双引号引用变量防止字符串分割,保留变量中的空格:

a="A B       C"
echo ${a}      #输出A B C  丢失了空格
echo "${a}"   #输出A B       C    防止了字符串分割
echo '${a}'    #单引号全引用,输出  ${a} 这样的字面字符串

 

 

 

(2)命令替换

    将命令的标准输出作为值赋给变量

a=`pwd`
b=$(pwd)    #$() 的方式可以嵌套使用

 

    命令替换返回有多行时,要若不引用命令替换结果,则换行符会被删除

a=`ls -l .`
echo ${a}    #输出无换行符,很杂乱
echo "${a}"  #一个文件/目录一行显示

 

 

 

6. 有类型变量

       declare、typeset(两个命令相同)

declare [option] name

     选项:

        -r    变量设置只读

        -i    变量定义为整数

        -a   变量定义为数组

        -f    显示此脚本前定义过的所有函数名及其内容

        -F   仅显示此脚本前定义过的所有函数名

        -x   将变量声明为环境变量

 

 

7. 间接变量引用

 

 

 

 

8. 数学运算

(1)expr命令

 

(2)bc运算器

 

posted @ 2020-09-21 21:42  T,X  阅读(167)  评论(0编辑  收藏  举报