当前位置:   article > 正文

[Linux][Shell][Shell变量]详细讲解

[Linux][Shell][Shell变量]详细讲解


1.本地变量

  • 定义Shell变量,变量名不需要加$
  • 本地变量只在⽤户当前shell⽣存期中有效

2.变量定义

  • 变量名要求:字⺟、数字、下划线组成、可以是字⺟或是下划线开头
  • 变量名严格区分⼤⼩写

3.取出变量值

  • 单引号:所⻅即所得,强引⽤
  • 双引号:输出引号⾥所有内容,识别特殊符号,弱引⽤
  • ⽆引号:连续的符号可以不加引号,有空格则有歧义,最好使⽤双引号
  • 反引号:引⽤命令执⾏结果,等于$()⽤法

4.特殊变量

  • shell的特殊变量,⽤在如脚本,函数传递参数使⽤

  • 有如下特殊的,位置参数变量

    变量作用
    $0获取shell脚本文件名,以及脚本路径
    $n获取shell脚本的第n个参数,n在1~9之间,大于9则需要些{},如{$10}
    $#获取执行的shell脚本后面的参数总个数
    $*获取shell脚本所有参数,不加引号等同于$@作用,加上引号"$*"作用是接收所有参数为单个字符串
    $@不加引号,效果同上,加引号,是接收所有参数为独立字符串

5.特殊状态变量

  • 查找方式man bash,搜索Special Parameters

    变量作用
    $?上次命令执行状态返回值,0正确,非0失败
    $$当前shell脚本的进程号
    $!上一次后台进程的PID
    $_获取上次命令的最后一个参数

6.shell内置的变量命令

1.echo

  • 参数
    • -n:不换行输出内容
    • -e:解释转义字符
      • \n:换行
      • \r:回车
      • \t:tab
      • \b:退格
      • \v:纵向制表符

2.eval

  • 功能:执行多个命令
  • 示例eval ls; cd ~

3.exec

  • 功能:不创建子进程,执行后续命令,exec执行后,自动exit

7.截取字符串

  • 语法

    语法作用
    #从开头删除匹配最短
    ##从开头删除匹配最长
    %从结尾删除匹配最短
    %%从结尾删除匹配最长
    #指定字符内容截取
    a*c匹配开头为a,中间任意个字符,结尾为c的字符串
    ${变量}返回变量值
    ${#变量}返回变量长度,字符长度
    ${变量:start}返回变量offset数值之后的字符
    ${变量:start:length}提取offset之后的length限制的字符
    ${变量#word}从变量开头,删除最短匹配的word子串
    ${变量##word}从变量开头,删除最长匹配的word
    ${变量%word}从变量结尾,删除最短匹配的word子串
    ${变量%%word}从变量结尾,删除最长匹配的word子串
    ${变量/pattern/string}用string代替第一个匹配的pattern
    ${变量//pattern/string}用string代替所有的pattern
  • 操作实例:删除文件名

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8.特殊shell扩展变量处理

1.语法

  • 功能:这四个扩展变量,都属于对变量的值进行判断、处理
  • 语法parameter,参数,范围
    • ${parameter:-word}:如果parameter变量值为空,返回word字符串
    • ${parameter:=word}:如果parameter变量值为空,则word替代变量值,且返回其值
    • ${parameter:?word}:如果parameter变量值为空,word当作stderr输出,否则输出变量值
      • ⽤于设置变量为空导致错误时,返回的错误信息
    • ${parameter:+word}:如果parameter变量值为空,什么都不做,否则word返回

2.应用场景

  • 数据备份,删除过期数据的脚本
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/864894
推荐阅读
相关标签
  

闽ICP备14008679号