shell 需要注意的点

#!/bin/bash
set -o nounset
set -o errexit#set -o nounset
#在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。#set -o errexit
#在默认情况下,遇到执行出错,会跳过并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。#封装函数
log () {local prefix="[$(date +%Y/%m/%d\ %H:%M:%S)]: "echo "${prefix} $@" >&2
}
#转自 架构师之路

  

 

 

条件变量替换: 
   Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 
条件放在{}中. 
(1) ${value:-word} 

       当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值. 

(2) ${value:=word} 

       与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 

       word赋值给value 

(3) ${value:?message} 

       若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若 

       此替换出现在Shell程序中,那么该程序将终止运行) 

(4) ${value:+word} 

       若变量以赋值的话,其值才用word替换,否则不进行任何替换 

(5) ${value:offset} 
       ${value:offset:length} 
       从变量中提取子串,这里offset和length可以是算术表达式. 

(6) ${#value} 

       变量的字符个数 

(7) ${value#pattern} 
       ${value##pattern} 
       去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配 
       #与##的区别在于一个是最短匹配模式,一个是最长匹配模式. 

(8) ${value%pattern} 

       ${value%%pattern} 
       于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样 

(9) ${value/pattern/string} 

       ${value//pattern/string} 
       进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同 

注意: 上述条件变量替换中,除(2)外,其余均不影响变量本身的值 

 

shell字符串比较、判断是否为数字

二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.

整数比较

-eq       等于,如:if [ "$a" -eq "$b" ]
-ne       不等于,如:if [ "$a" -ne "$b" ]
-gt       大于,如:if [ "$a" -gt "$b" ]
-ge       大于等于,如:if [ "$a" -ge "$b" ]
-lt       小于,如:if [ "$a" -lt "$b" ]
-le       小于等于,如:if [ "$a" -le "$b" ]
<       小于(需要双括号),如:(("$a" < "$b"))
<=       小于等于(需要双括号),如:(("$a" <= "$b"))
>       大于(需要双括号),如:(("$a" > "$b"))
>=       大于等于(需要双括号),如:(("$a" >= "$b"))

字符串比较
=       等于,如:if [ "$a" = "$b" ]
==       等于,如:if [ "$a" == "$b" ],与=等价
       注意:==的功能在[[]]和[]中的行为是不同的,如下:
       1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true
       2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
       3
       4 [ $a == z* ]      # File globbing 和word splitting将会发生
       5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
       一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
       但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!=       不等于,如:if [ "$a" != "$b" ]
       这个操作符将在[[]]结构中使用模式匹配.
<       小于,在ASCII字母顺序下.如:
       if [[ "$a" < "$b" ]]
       if [ "$a" \< "$b" ]
       注意:在[]结构中"<"需要被转义.
>       大于,在ASCII字母顺序下.如:
       if [[ "$a" > "$b" ]]
       if [ "$a" \> "$b" ]
       注意:在[]结构中">"需要被转义.
       具体参考Example 26-11来查看这个操作符应用的例子.
-z       字符串为"null".就是长度为0.
-n       字符串不为"null"
       注意:
       使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z
       或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可
       以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

转载于:https://www.cnblogs.com/super-lulu/p/11062130.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#将Json字符串反序列化成List对象类集合

usingSystem.IO;usingSystem.Web.Script.Serialization;usingSystem.Runtime.Serialization.Json;//工具类publicstaticList<T> JSONStringToList<T>(thisstring JsonStr){JavaScriptSerializer Serializer newJavaScriptSerializer();List<T> objs Serial…

mysql Access denied for user root@localhost错误解决方法总结

代码如下 复制代码 # /etc/init.d/mysql stop # mysqld_safe --usermysql --skip-grant-tables --skip-networking & # mysql -u root mysql mysql> UPDATE user SET PasswordPASSWORD(newpassword) where USERroot; mysql> FLUSH PRIVILEGES; mysql> quit # /e…

有趣的反直觉的“三门问题”

————— 第二天 ————— ———————————— 如何进行分析呢&#xff1f;我们不妨回到问题的起点&#xff0c;也就是参与者即将进行初次选择&#xff0c;主持人还没有打开一扇空门的时候。 从上图可以看出&#xff0c;我们总共面临着6种不同的子局面。这些子局面的…

centos 开发环境配置

yum groupinstall Development Tools 通过上面命令下载开发所需要的工具 http://unix.stackexchange.com/questions/140350/linux-g-command-not-found

转使用Moq让单元测试变得更简单

【ASP.Net MVC3 】使用Moq让单元测试变得更简单 前几天调查完了unity。现在给我的任务是让我调查Moq。 以下是自己找了资料&#xff0c;总结并实践的内容。如果有表述和理解错误的地方。恳请指正。 什么是Moq&#xff1f; Moq&#xff08;英语发音是Mock-you 或者只是mock&…

Web Service实现分布式服务的基本原理

简单的说&#xff0c; 就是客户端根据WSDL 生成 SOAP 的请求消息&#xff0c; 通过 HTTP 传输方式&#xff08;也可以是其它传输方式&#xff0c; 如 FTP 或STMP 等&#xff0c;目前 HTTP 传输方式已经成为 J2EE Web Service 的标准&#xff09;传给对方&#xff0c; 服务方实现…

使用docker部署mysql主从复制集群

一、环境搭建 虚拟机环境&#xff1a;centos7 IP:192.168.37.134 用户名&#xff1a;root 密码&#xff1a;123 启动3个容器&#xff0c;一个是master&#xff0c;端口是3307&#xff0c;另外两个是slaver&#xff0c;端口是3308和3309 docker pull mysql:5.7docker run -p …

猛然回首 在这里4年了

猛然回首 在这里4年了 今天浏览博客园的时候 才发现 自己还有一个博客园的账号&#xff0c; GOD&#xff01; 4年了&#xff0c;猛然回首 自己又老了&#xff0c;这些年 不知道自己 搞了些什么东西&#xff0c;这日子过的真是 哎&#xff01;posted on 2012-01-11 17:25 RIBBIT…

.js——alert()语句

在.js文件中&#xff0c;通过alert()语句可以生成弹出框&#xff0c;弹出框中的内容message部分可以是常量字符串&#xff0c;也可以是含有变量的字符串连接&#xff0c;下面举几个例子简要说明下&#xff1a; 1. 参数为常量字符串 alert("warnningArray[1]:124"); 运…

Linux 编译安装Boost

http://blog.csdn.net/zgl_dm/article/details/8363843 linux平台下要编译安装除gcc和gcc-c之外&#xff0c;还需要两个开发库&#xff1a;bzip2-devel 和python-devel&#xff0c;因此在安装前应该先保证这两个库已经安装&#xff1a;#yum install gcc gcc-c bzip2 bzip2-deve…

如何利用System.Net.Mail类发送EMAIL

废话不多说&#xff0c;直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail;namespace MailSender {class Program{static string strHost string.Empty;static string strAccount string.Empty;stat…

特殊的质数肋骨

特殊的质数肋骨 时间限制: 0 Sec 内存限制: 128 MB题目描述 农民约翰的母牛总是生产出最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质…

安装perl5.10.0

目的&#xff1a;本人使用的Linux系统CentOS5.8中最新的perl版本是5.8.8。学习perl语言入门&#xff0c;一般情况下够用&#xff0c;但是在使用given-when这种结构的时候&#xff0c;就必须指定5.10版本(use 5.0.10.0;)步骤&#xff1a;1. wget http://www.cpan.org/src/perl-5…

Linux下编译Jsoncpp

载软件包:jsoncpp-src-0.5.0.tar.gz scons-2.1.0.tar.gz # tar zxvf scons-2.1.0.tar.gz # tar zxvf jsoncpp-src-0.5.0.tar.gz 设定环境变量【关键】,绝对路径# export MYSCONS解压的路径 # export SCONS_LIB_DIR$MYSCONS/engine # cd jsoncpp-src-0.5.0 # python $MYSCONS…

逛公园

传送门 解法: 先不考虑0环 很容易想到dp 状态转移方程也很容易想到 设\(d[i]\)为n到i的最短路长度 当然此时是反向图 反向图是为了防止1能到达的点到达不了n而出错\(dp[i][j]\)表示到达i点距离为\(d[i]j\)的路径个数 则 x->y有路径 \(dp[x][k]dp[y][k-(d[y]edge(x,y)-d[x])]…

poj2299 ( bit )

树状数组求逆序数&#xff0c;先排个序&#xff0c;从大到小往插&#xff0c;计算在他的前面有几个比他大&#xff0c;就是他的逆序数。 &#xff08;PS&#xff1a;最近对数量越来越不敏感了&#xff0c;老在这上面错。多做题&#xff0c;不能断啊&#xff09; 1 #include <…

Linux下编译安装openssl

(1) 下载openssl压缩包。在 http://www.openssl.org/source/ 选择合适版本的压缩包&#xff0c;一般选择标记有“[LATEST]”的包&#xff0c;假设其link为 http://www.openssl.org/source/openssl-1.0.1c.tar.gz&#xff0c;用下面的下载&#xff1a; # wget http://www.openss…

前端小插件之手写js循环滚动特效

很多前端都离不开滚动的特效&#xff0c;调用插件繁琐&#xff0c;后期更改麻烦&#xff0c;考虑到这些因素&#xff0c;自己写了一套无限循环滚动的小特效。 首先滚动特效很好写&#xff0c;用css就可以完成&#xff0c;下面写一个基础css向上循环滚动特效 html <div class…

敏捷开发一千零一问系列之七:怎样对待有看法的徒弟?

这是敏捷开发一千零一问系列的第七篇。&#xff08;之一&#xff0c;之二&#xff0c;之三&#xff0c;问题总目录&#xff09;问题松结对编程中&#xff0c;师傅对徒弟安排任务时&#xff0c;对于有想法的徒弟提出的意见怎样解决&#xff1f;方案步骤0&#xff1a;正心&#x…

SSH远程登录失败,提示“Password authentication failed”

使用SecureCRT登陆&#xff0c;提示“Password authentication failed” 使用linux下ssh登陆&#xff0c;提示“Permission denied, please try again.” 网上收集的相关资料&#xff1a; 方法一&#xff1a; 1. vi服务器端的/etc/ssh/sshd_config 2. 把PasswordAuthentication…