Shell特殊扩展变量的实践

博主名:李常明

博客地址:http://keep88.blog.51cto.com

此笔记出自老男孩书籍:跟老男孩学linux运维  shell编程实战

特殊扩展变量

1、${parameter:-word}功能实践

${parameter:-word}的作用是如果parameter变量值为空或未赋值,则会返回word字符串替代变量的值

例如:

[[email protected] ~]# echo $test    #>==   此时test变量未赋值

[[email protected] ~]# echo ${test:-word}      #>==  可以看到test变量未赋值,输出了 word,表明test变量为空,返回 “-”后面定义的字符,但是需注意 不会将word赋值给test变量,只是一个标识。
word
[[email protected] ~]# test="abc"    #>==  将test变量赋值 abc,查看输出结果
[[email protected] ~]# echo $test
abc
[[email protected] ~]# echo ${test:-word}   #>==  此时test变量有赋值,所以输出了test变量的值。
abc
[[email protected] ~]#

注释:

${parameter:-word} 中的冒号“:”是可以省去的。与上述结果无区别

2、${parameter:=word}功能实践:

判断parameter的变量是否有值,如果有值输出变量的值,如果未赋值,则将“-”后面的字符 word(自定义的)赋值给parameter变量

例如:

[[email protected] ~]# unset test
[[email protected] ~]# echo $test  #>==  test变量未赋值

[[email protected] ~]# A=${test:=word}
[[email protected] ~]# echo $A     #>==   未赋值,则将word赋值给变量test
word

如果test变量有赋值,则直接输出test的变量
[[email protected] ~]# test="5678"
[[email protected] ~]# echo $test
5678
[[email protected] ~]# B=${test:=word}
[[email protected] ~]# echo $B   #>==  test变量有赋值,直接输出值,不会将word赋值给$test
5678

以上两个特殊变量的区别:

${parameter:-word}: 如果parameter有赋值,输出值,无赋值,输出"-"后定义的字符,不会赋值给变量parameter,只是显示信息

${parameter:=word}: 如果parameter有赋值,输出值,无赋值,将"="后定义的字符,赋值给变量parameter

3、${parameter:?word}功能实践:

如果parameter变量未赋值,则提示错误信息为"?"后定义的字符,如果已赋值,则直接输出值

例如:

[[email protected] ~]# unset test   #>==  取消test变量的赋值
[[email protected] ~]# echo ${test:? is not value}
-bash: test:  is not value    #>==  可以看到,未赋值情况下,输出了? 后定义的错误信息

如果有赋值呢?查看结果:

[[email protected] ~]# test="abcdefg"   #>==   给test变量赋值
[[email protected] ~]# echo $test
abcdefg

[[email protected] ~]# echo ${test:? test  is not have value}
abcdefg    #>==   test变量有值的情况下,直接输出了值

4、${parameter:+word}功能实践

如果parameter未赋值,则输出空,如果parameter变量有赋值,则输出+ 后定义的信息,但是不会赋值给parameter变量

例如:

[[email protected] ~]# unset test
[[email protected] ~]# echo $test 

[[email protected] ~]# echo ${test:+word}       #>==  test变量为赋值,输出了空

[[email protected] ~]# test=aaaaaaa
[[email protected] ~]# echo ${test:+word}  #>==  输出word,说明test变量有赋值,但不会将word赋值给test,只是输出信息,用于提示
word
[[email protected] ~]# echo $test   #>==  test变量还是最初定义的值
aaaaaaa

生产案例:

删除7天前的过期数据备份

如果忘记了定义path变量,又不希望path值为空值,就可以定义/tmp替代path空值的返回值,

例如:

[[email protected] ~]# cat delete.sh 
find ${path- /tmp} -name *.tar.gz -type f -mtime +7 | xargs rm -f

[[email protected] ~]# sh -x delete.sh 
+ xargs rm -f
+ find /tmp -name ‘*.tar.gz‘ -type f -mtime +7

如果path变量未设置,未空,则返回下列内容:
[[email protected] ~]# cat delete.sh 
find ${path} -name *.tar.gz -type f -mtime +7 | xargs rm -f
[[email protected] ~]# sh -x delete.sh 
+ xargs rm -f
+ find -name ‘*.tar.gz‘ -type f -mtime +7  #>==  此时执行脚本,就会报错
时间: 2024-08-03 22:34:54

Shell特殊扩展变量的实践的相关文章

Shell编程-03-Shell中的特殊变量和扩展变量

特殊变量 ? ? 在Shell中的特殊变量主要分别两种位置参数变量.状态变量两种. 位置参数变量 ? ? Shell中的位置参数变量主要是指$0.$1.$#等,主要用于从命令行.函数或脚本执行等地方传递参数.详细说明如下所示: $0:获取当前执行的Shell脚本的文件名,如脚本中包含路径,则输出也包括路径 $n:获取当前执行的Shell脚本的第n个参数值,如n>9,则需要使用用大括号,如${10},各参数间用空格进行分隔 $#:获取当前执行的Shell脚本传入参数的总个数 $*:获取当前执行的S

1.Linux Shell中的变量

1. Shell变量类型 Shell是一种动态类型语言(不使用显式的数据声明)和弱类型语言(变量的类型操作根据需求而不同).Shell中的变量是不分类型的(都是字符串类型),但是依赖于具体的上下文,Shell编程也允许比较操作和整数操作. 2. Shell变量的分类 Shell中有3种变量:用户变量.位置变量(Processing Parameter).环境变量. 1.用户变量:用户在Shell编程过程中定义的变量,分为全局变量和局部变量.默认情况下,用户定义的Shell变量为全局变量,如果要指

shell中的变量及shell条件判断

Shell 基础之变量和条件判断 一.shell概述 1.shell概述: shell是一个命令行的解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统及程序,用户可以用shell来启动.挂起.停止甚至编写一些程序,shell还是一个功能强大的编程语言,shell是解释性的脚本语言,在shell中可以直接调用Linux命令. 2.shell脚本的用途 (1)自动化常用的命令 (2)执行系统管理和故障排除 (3)执行简单的应用程序 (4)处理文本或文件 3.shell的分类 (1

二、Shell中的变量

变量是任何程序或脚本的重要组成部分.变量为程序或脚本访问内存中的可被修改的一块数据提供了简单的方式.Linux Shell中的变量可以被指定为任意的数据类型.Shell中有两种变量的类型:系统变量(环境变量)和用户自定义的变量(本地变量或Shell变量). 环境变量:作用域为当前shell进程及其子进程:环境变量一般均为大写.常用的环境变量有: 系统变量 含义 BASH_VERSION 保存bash实例的版本 DISPLAY 设置X display名字 EDITOR 设置默认的文本编辑器 HIS

进程和程序:编写shell——《Unix/Linux编程实践教程》读书笔记(第8章)

1.Unix shell的功能 shell是一个管理进程和运行程序的程序.所有常用的shell都有3个主要功能: (1)运行程序: (2)管理输入和输出 (3)可编程 shell同时也是带有变量和流程控制的编程语言. 2.Unix的进程模型 一个程序是存储在文件中的机器指令序列,一般它是由编译器将源代码编译成二进制格式的代码.运行一个程序意味着将这些机器指令序列载入内存然后让处理器(CPU)逐条执行.在Unix术语中,一个可执行程序是一些机器指令机器数据的序列.一个进程是程序运行时的内存空间和设

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

SHELL 八大扩展

最近在梳理bash知识的的过程中,有幸阅读了man bash文档,一时间犹如醍醐灌顶一般,很多当初不明白的地方都豁然开朗,现在就其中的一点做一分享,同时也为man bash做一下广告,当你面对bash问题孤立无援的时候,别忘了还有man bash的陪伴. Bash 支持的扩展种类有:brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansi

第二章 Shell编程之变量

Shell编程之变量 一 Bash变量与变量分类 Bash是Linux中的标准Shell,因此经常称Bash为Shell. 1. 变量命名规则 变量名可以由字母.数字.下划线组成,但必须以字母与下划线开头: 变量名的长度不能超过255个字符: 变量名在有效范围必须唯一: 在Bash中,变量的默认类型都字符串型: 2. 变量按照存储类型分类 默认类型是字符串型. 字符串型,赋值时单双引号皆可: 整形: 浮点型: 日期型: 二 用户自定义变量 变量名与变量值都是用户自定义的,就是说可以由用户控制修改

shell脚本之变量替换

代码如下 #!/bin/bash a=123 let "a += 1" echo a=$a echo b=${a/12/BB} echo "b=$b" 执行结果为 a=124 b=BB4 b=${a/12/BB} 变量a中的值12被替换为BB,所以$b=BB4 shell脚本之变量替换,布布扣,bubuko.com