shell 变量

变量

        A="a b c def"           # 将字符串复制给变量
        A=`cmd`                 # 将命令结果赋给变量
        A=$(cmd)                # 将命令结果赋给变量
        eval a=$$a             # 间接调用
        i=2&&echo $((i+3))      # 计算后打印新变量结果
        i=2&&echo $[i+3]        # 计算后打印新变量结果
        a=$((2>6?5:8))          # 判断两个值满足条件的赋值给变量
        $1  $2  $*              # 位置参数 *代表所有
        env                     # 查看环境变量
        env | grep "name"       # 查看定义的环境变量
        set                     # 查看环境变量和本地变量
        read name               # 输入变量
        readonly name           # 把name这个变量设置为只读变量,不允许再次设置
        readonly                # 查看系统存在的只读文件
        export name             # 变量name由本地升为环境
        export name="RedHat"    # 直接定义name为环境变量
        export Stat$nu=2222     # 变量引用变量赋值
        unset name              # 变量清除
        export -n name          # 去掉只读变量
        shift                   # 用于移动位置变量,调整位置变量,使$3的值赋给$2.$2的值赋予$1
        name + 0                # 将字符串转换为数字
number " " # 将数字转换程字符串

数组

            A=(a b c def)         # 将变量定义为数組
            ${#A[*]}              # 数组个数
            ${A[*]}               # 数组所有元素,大字符串
            ${A[@]}               # 数组所有元素,类似列表可迭代
            ${A[2]}               # 脚本的一个参数或数组第三位

定义变量类型

            declare 或 typeset
            -r 只读(readonly一样)
            -i 整形
            -a 数组
            -f 函数
            -x export
            declare -i n=0

系统变量

            $0   #  脚本启动名(包括路径)
            $n   #  第n个参数,n=1,2,…9
            $*   #  所有参数列表(不包括脚本本身)
            $@   #  所有参数列表(独立字符串)
            $#   #  参数个数(不包括脚本本身)
            $$   #  当前程式的PID
            $!   #  执行上一个指令的PID
            $?   #  执行上一个指令的返回值

变量引用技巧

${name:+value}        # 如果设置了name,就把value显示,未设置则为空
${name:-value}        # 如果设置了name,就显示它,未设置就显示value
${name:?value}        # 未设置提示用户错误信息value 
${name:=value}        # 如未设置就把value设置并显示<写入本地中>
${#A}                 # 可得到变量中字节
${A:4:9}              # 取变量中第4位到后面9位
${A/www/http}         # 取变量并且替换每行第一个关键字
${A//www/http}        # 取变量并且全部替换每行关键字
				
定义了一个变量: file=/dir1/dir2/dir3/my.file.txt
${file#*/}     # 去掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
${file##*/}    # 去掉最后一条 / 及其左边的字串:my.file.txt
${file#*.}     # 去掉第一个 .  及其左边的字串:file.txt
${file##*.}    # 去掉最后一个 .  及其左边的字串:txt
${file%/*}     # 去掉最后条 / 及其右边的字串:/dir1/dir2/dir3
${file%%/*}    # 去掉第一条 / 及其右边的字串:(空值)
${file%.*}     # 去掉最后一个 .  及其右边的字串:/dir1/dir2/dir3/my.file
${file%%.*}    # 去掉第一个 .  及其右边的字串:/dir1/dir2/dir3/my
#   # 是去掉左边(在键盘上 # 在 $ 之左边)
#   % 是去掉右边(在键盘上 % 在 $ 之右边)
#   单一符号是最小匹配﹔两个符号是最大匹配

  

原文地址:https://www.cnblogs.com/sharesdk/p/8696060.html