shell替换

摘要:
如果表达式包含特殊字符,shell将替换它们/Bin/basha=10echo-e“Valueofais$a”运行结果:Valueofais10这里-e表示替换转义字符。命令替换命令替换意味着shell可以先执行命令,暂时保存输出结果,并将其输出到适当的位置/bin/bashDATE=`date`echo“Dateis$date”USERS=`who|wc-l`echo”Loggeduserare$USERS“UP=`date;Uptime`echo“Uptimeis$UP”运行结果:日期:星期四,203:59:57MST2009LoggeduserareUptimesThuJul203:59:57 MST200903:59:57up20天,14:03,1user,loadavg:0.13,0.07,0.15变量替换变量替换可以根据变量的状态更改其值变量替换表单可以使用:表单描述${var}变量的原始值${var:-word}如果变量var为空或已被删除,则返回word,但不要更改var的值。如果此替换发生在shell脚本中,脚本将停止运行。

如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。

举个例子:

  1. #!/bin/bash
  2. a=10
  3. echo -e"Value of a is $a "

运行结果:

Value of a is 10

这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:

Value of a is 10


下面的转义字符都可以用在 echo 中:

转义字符含义
\反斜杠
a警报,响铃
退格(删除键)
f换页(FF),将当前位置移到下页开头
换行
回车
水平制表符(tab键) 
v垂直制表符

可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

命令替换

命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。

命令替换的语法:

  1. `command`

注意是反引号,不是单引号,这个键位于 Esc 键下方。

下面的例子中,将命令执行结果保存在变量中:

  1. #!/bin/bash
  2. DATE=`date`
  3. echo "Date is $DATE"
  4. USERS=`who | wc -l`
  5. echo "Logged in user are $USERS"
  6. UP=`date ; uptime`
  7. echo "Uptime is $UP"

运行结果:

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

变量替换

变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

可以使用的变量替换形式:

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。


请看下面的例子:

#!/bin/bash

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

运行结果:

  1. Variable is not set
  2. 1 - Value of var is
  3. Variable is not set
  4. 2 - Value of var is Variable is not set
  5. 3 - Value of var is
  6. This is default value
  7. 4 - Value of var is Prefix
  8. Prefix
  9. 5 - Value of var is Prefix

免责声明:文章转载自《shell替换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DELPHI支付宝支付代码Hutool-二维码生成下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)windows shell 编程

第一章 Windows Shell是什么 一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访问文件系统,导出执行程序,改变系统设置等。MS-DOS有一个Command.COM扮演着这个角色。然而Windows已经有了图形界面环境,他的外壳程序也就必然是图形方式的。在Windows95以前,默认的Windows Shel...

Android Monkey压力测试使用

一、Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。只针对Activity做测试,不能对Servic...

linux命令(shell脚本、定时任务等)

Shell script(Shell脚本)的工作方式有两种:交互式:用户每输入一条命令,然后Shell立即执行一次;批处理:由用户实现编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。 一、服务重启脚本:nohup bash demo.sh & shell环境变量设置,更多参考:https://www.cnblogs.com...

java执行linux shell命令,并拿到返回值

1 packagecom.pasier.xxx.util; 2 3 importjava.io.IOException; 4 importjava.io.InputStream; 5 importjava.nio.charset.Charset; 6 7 importorg.slf4j.Logger; 8 importorg.slf4j.LoggerF...

VMWare Esxi 6.5(实际为5.x,6.x)时区问题

Esxi不支持修改时区,但是可以使用ESX或者Centos 6/7的localtime文件进行替换以实现时区修改,问题是,重启后文件会被还原。 详细的纠结过程就不说了,终级解决方案如下(给公司写的,现分享出来): 大概思路是:将centos 6中/usr/share/zoneinfo/Asia/Shanghai文件(如果是它国时区,请自行替换base64内...

dos 日期时间格式设置

@echo off@title 字符串的编辑测试(下面描述用的箭头→ ← 分别表示向右、向左的意思)set aa=1234567890echo 说明:下面复合变量中,逗号前的数字表示指针偏移量,逗号后的数字表示提取的字符长度echo %aa:~1,5% //指针向右→偏移1位,然后从指针处开始向右→提取5个字符.echo %aa:~0,-3% //指针不偏...