Always keep a beginner's m|

南哈哈

园龄:3年10个月粉丝:2关注:0

Shell 变量

什么是shell变量?

变量的类型

变量的定义方法

变量的运算

变量 "内容" 的删除和替换

 

shell变量?用一个特定的字符串去表示不固定的内容

变量 variable [ˈveriəbl] 

 

变量的类型:

1. 自定义变量

    定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写

    引用变量: $变量名 或 ${变量名}

    查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)

    取消变量: unset 变量名

    作用范围: 仅在当前shell中生效

2. 环境变量

    定义环境变量: 方法一 export dir_path=/data/lib/

                          方法二 export dir_path 将自定义变量转换成环境变量

    引用环境变量: $变量名 或 ${变量名}

    查看环境变量: echo $变量名  env 例如:env | grep dir_path

    取消环境变量: unset 变量名

    变量作用范围: 在当前shell和子shell有效

                          C语言      局部变量      vs    全局变量

                          SHELL     自定义变量   vs     环境变量

3. 位置变量

    $1  $2  $3  $4  $5  $6  $7  $8  $9  ${10}

4. 预定义变量

    $0   脚本名

    $*    所有的参数

    $@   所有的参数

    $#    参数的个数

    $$    当前进程的PID

    $!     上一个后台进程的PID

    $?    上一个命令的返回值 0表示成功

 

变量的赋值方式:

1. 显示赋值

   变量名=变量值

   示例:

   IP1=192.168.1.1

   school=“Beijing”

   today1=`date +%F`

   today2=$(date +%F)

2. read 从键盘读入变量值

    read  变量名

    read -p "提示信息:" 变量名

    read -t 5 -p "提示信息:" 变量名

    read -n 2 变量名

    参数:

     -t 等待时间

     -n 字符限制

 

定义或引用变量时注意事项:

" " 弱引用

' '  强引用

v_nanruosen➜~» name=south
v_nanruosen➜~» echo "${name} is good"
south is good
v_nanruosen➜~» echo '${name} is good'
${name} is good

` ` 命令替换 等价于 $() 反引号中的shell命令会被先执行

v_nanruosen➜~» touch `date +%F`_south.log
v_nanruosen➜~» touch $(date +%F)_south.log
v_nanruosen➜~» disk_free1="df -h |grep '/$'|awk '{print $4}'" 错误
v_nanruosen➜~» disk_free2=$(df -h |grep '/$'|awk '{print $4}')
v_nanruosen➜~» disk_free3=`df -h |grep '/$'|awk '{print $4}'`

变量的运算:

1. 整数运算

方法一:expr
expr 1 + 2
expr $num1 + $num2 + - \* / %
方法二:$(())
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo $((1**2))
sum=$((1+2));echo $sum
方法三:$[]
echo $[20+30] + - * / %
echo $[2**10]
方法四:let
let sum=2+3;echo sum
let i++;echo $i

2. 小数运算

echo "2*3" | bc
echo "2^3" | bc
echo "scale=2";6/4" bc #scale=2保留两位小数
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" | python

变量"内容"的删除和替换 (扩展)

1. "内容" 的删除

v_nanruosen➜~» url="www.cnblogs.com.nanruosen.cn"
v_nanruosen➜~» echo ${#url} 获取变量值的长度
28
v_nanruosen➜~» echo ${url} 标准查看
www.cnblogs.com.nanruosen.cn
v_nanruosen➜~» echo ${url#www.} 从前往后,删除"#"后的内容
cnblogs.com.nanruosen.cn
v_nanruosen➜~» echo ${url#*.} 从前往后,最短匹配
cnblogs.com.nanruosen.cn
v_nanruosen➜~» echo ${url##*.} 从前往后,最长匹配 贪婪匹配
cn
v_nanruosen➜~» url="www.cnblogs.com.nanruosen.cn"
v_nanruosen➜~» echo ${url%.cn} 从后往前,删除"%"后的内容
www.cnblogs.com.nanruosen
v_nanruosen➜~» echo ${url%.*} 从后往前,最短匹配
www.cnblogs.com.nanruosen
v_nanruosen➜~» echo ${url%%.*} 从后往前,最长匹配 贪婪匹配
www
v_nanruosen➜~» echo ${url#com.} 错误的匹配
www.cnblogs.com.nanruosen.cn
v_nanruosen➜~» echo ${url#*com.}
nanruosen.cn
索引及切片
www.cnblogs.com.nanruosen.cn
0123456789......
v_nanruosen➜~» echo ${url:0:10}
www.cnblog
v_nanruosen➜~» echo ${url:4:11}
cnblogs.com
v_nanruosen➜~» echo ${url:5}
nblogs.com.nanruosen.cn

2. "内容" 的替换

v_nanruosen➜~» url="www.cnblogs.com.nanruosen.cn"
v_nanruosen➜~» echo ${url/cnblogs/baidu}
www.baidu.com.nanruosen.cn
v_nanruosen➜~» echo ${url/n/N}
www.cNblogs.com.nanruosen.cn
v_nanruosen➜~» echo ${url//n/N} 从左往右,"//" 全部替换 贪婪匹配
www.cNblogs.com.NaNruoseN.cN

3. 变量的替代

v_nanruosen➜~» unset var1 取消变量
v_nanruosen➜~» echo ${var1}
v_nanruosen➜~»
v_nanruosen➜~» echo ${var1-newvar} "-" 替换变量,"var1"没有定义 可以被直接替代
newvar
v_nanruosen➜~» var2=1111
v_nanruosen➜~» echo ${var2-2222} "var2"已经定义 "-" 不可替代原有变量
1111
v_nanruosen➜~» echo ${var2+3333} "+" 会覆盖原有变量
3333
v_nanruosen➜~» var3=
v_nanruosen➜~» echo ${var3-aaaa} "var3"已经被定义没有内容,不可替代
v_nanruosen➜~»
${变量名-新的变量值}
变量没有被赋值: 会使用"新的变量值"替代
变量有被赋值(包括空值): 不会被替代
v_nanruosen➜~» unset var1
v_nanruosen➜~» var2=
v_nanruosen➜~» var3=3333
v_nanruosen➜~» echo ${var1}
v_nanruosen➜~» echo ${var1:-1111}
1111
v_nanruosen➜~» echo ${var2:-1111}
1111
v_nanruosen➜~» echo ${var3:-1111}
3333
${变量名:-新的变量值}
变量没有被赋值(包括空值): 都会使用"新的变量值"替代
变量有被赋值: 不会被替代
v_nanruosen➜~» echo ${var3+aaaa}
v_nanruosen➜~» echo ${var3:+aaaa}
v_nanruosen➜~» echo ${var3=aaaa}
v_nanruosen➜~» echo ${var3:=aaaa}
v_nanruosen➜~» echo ${var3?aaaa}
v_nanruosen➜~» echo ${var3:?aaaa}

i++ 和 ++i

1. 对变量的值的影响:

v_nanruosen➜~» i=1
v_nanruosen➜~» let i++
v_nanruosen➜~» echo $i
2
v_nanruosen➜~» j=1
v_nanruosen➜~» let ++j
v_nanruosen➜~» echo $j
2

2. 对表达式的值的影响:

v_nanruosen➜~» i=1
v_nanruosen➜~» j=1
v_nanruosen➜~» let x=i++ 先赋值,后运算 (x=i)
v_nanruosen➜~» let y=++j 先运输,后赋值 (++j)
v_nanruosen➜~» echo $i
2
v_nanruosen➜~» echo $j
2
v_nanruosen➜~» echo $x
1
v_nanruosen➜~» echo $y
2

 

 

 

本文作者:nanruosen

本文链接:https://www.cnblogs.com/nanruosen/p/var.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   南哈哈  阅读(50)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起