环境:

[root@test ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@test ~]# uname -a
Linux test 2.6.-.el6.x86_64 # SMP Fri Nov :: UTC x86_64 x86_64 x86_64 GNU/Linux

一、shell 多行注释

[root@test tmp]# cat test.sh
#!/usr/bin/env bash
# echo
echo
echo
echo
echo
echo
echo
[root@test tmp]# sh test.sh [root@test tmp]# vim test.sh
[root@test tmp]# cat test.sh
#!/usr/bin/env bash
# echo
echo
:<<!
echo
echo
echo
echo
!
echo
[root@test tmp]# sh test.sh

提示:这里的叹号(!)可以换成其他任意成对的字符

二、内置的模糊匹配

  注意:使用匹配的方式一定要是[[ ]]这种方式

  1、正则方式匹配

[root@test ~]# [[ "$var" =~ "a|b" ]] && echo ok || echo fail
fail
[root@test ~]# [[ "$var" =~ a|b ]] && echo ok || echo fail
ok
[root@test ~]# var=
[root@test ~]# [[ "$var" =~ a|b ]] && echo ok || echo fail
fail
[root@test ~]# var=b
[root@test ~]# [[ "$var" =~ a|b ]] && echo ok || echo fail
ok
[root@test ~]# ip=172.16.100.5
[root@test ~]# [[ "$ip" =~ ^([-]{,}.){}[-]{,}$ ]] && echo ok || echo fail
ok
[root@test ~]# [[ "$ip" =~ "^([0-9]{1,3}.){3}[0-9]{1,3}$" ]] && echo ok || echo fail
fail
[root@test ~]# reg='^([0-9]{1,3}.){3}[0-9]{1,3}$'
[root@test ~]# [[ "$ip" =~ $reg ]] && echo ok || echo fail
ok
[root@test ~]# [[ "$ip" =~ "$reg" ]] && echo ok || echo fail
fail

[root@test ~]# a=uuoipwsdf23423rf5
[root@test ~]# [[ $a =~ .*df.* ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a =~ .*hh.* ]] && echo ok || echo fail
fail

小结:通过上面的示例,可以看出被匹配的对象不能加双引号,就算是变量也不能加。

  2、使用通配模式匹配

[root@test ~]# a=bbccddee
[root@test ~]# [[ $a = *e ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = *f ]] && echo ok || echo fail
fail
[root@test ~]# [[ $a = bb*ee ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = cc*ee ]] && echo ok || echo fail
fail
[root@test ~]# [[ $a = *cc*ee ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = *dd ]] && echo ok || echo fail
fail
[root@test ~]# [[ $a = *dd* ]] && echo ok || echo fail
ok
[root@test ~]# a=
[root@test ~]# [[ $a = ]] && echo ok || echo fail
fail
[root@test ~]# [[ $a = * ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = ** ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = [-] ]] && echo ok || echo fail
fail
[root@test ~]# [[ $a = [-][-][-] ]] && echo ok || echo fail
ok
[root@test ~]# [[ $a = [a-z][a-z][a-z] ]] && echo ok || echo fail
fail
[root@test ~]# a=
[root@test ~]# [[ $a = [a-z] ]] && echo ok || echo fail
fail

应用场景:可以用作对用户从命令行传递给脚本的参数做合法验证

三、case语句模糊匹配(通配符)

[root@test tmp]# cat test.sh
#!/usr/bin/env bash
#
test(){
case $ in
*abc*)
echo yes
;;
*)
echo no
;;
esac
} #test hkfase2abcljfp
test $ [root@test tmp]# sh test.sh fasdfasdf
no
[root@test tmp]# sh test.sh qewfsdabchwerf
yes 尝试用正则模式匹配
[root@test tmp]# cat test.sh
#!/usr/bin/env bash
#
test(){
case $ in
^.*abc.*$)
echo yes
;;
*)
echo no
;;
esac
} #test hkfase2abcljfp
test $ [root@test tmp]# sh test.sh qewfsdabchwerf
no

四、trap型号捕捉

[root@test tmp]# cat test.sh
#!/usr/bin/env bash
# fun_exit(){
echo -ne "\nThe program receives an interrupt signal,Do you wish to really exit? Your choice [ y | n ]: "
read answer
case $answer in
y)
exit
;;
n)
echo "program continue ..."
;;
*)
echo 'continue ...'
;;
esac
} trap "fun_exit" while true;do
echo
sleep
done
[root@test tmp]# sh test.sh ^C
The program receives an interrupt signal,Do you wish to really exit? Your choice [ y | n ]: n
program continue ... ^C
The program receives an interrupt signal,Do you wish to really exit? Your choice [ y | n ]:
continue ... ^C
The program receives an interrupt signal,Do you wish to really exit? Your choice [ y | n ]: y
[root@test tmp]#

提示:如果连续多次按ctrl+c 还是会中断

linux shell 小技能的更多相关文章

  1. Linux通用小技能

    Linux通用小技能 前言 无论你用ubuntu还是centos,通通没问题,运维这东西,踩坑写文档就是了. 小技能 新磁盘挂载 不管是阿里云还是腾讯云,还是自己的机器,请记住这条命令. mkfs.e ...

  2. Linux Shell 小脚本经典收藏

    原文:http://www.cnblogs.com/Javame/p/3867686.html 1.在两个文件中找出相同的号码 diff -y xx.txt oo.txt | egrep -v &qu ...

  3. 普及一个Linux的小技能~Ctrl+Z切换到后台运行

    逆天Linux一直是自己摸索的,几年下来也小有心得,前不久PC也换成Ubuntu了,但毕竟不是专门搞运维的,有些知识还是有死角 这不,今天发现了个小技巧,来和大家分享一下: 比如运行一个交互式的程序: ...

  4. Linux Shell 小知识

    ${} ——变量替换 通常 $var 与 ${var} 没有区别,但是用 ${} 会比较精确的界定变量名称的范围. name='Ace' echo "result1: my name is ...

  5. [转]Linux shell中的那些小把戏

    我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本 ...

  6. [转帖]拿小本本记下的Linux Shell常用技巧(一)

    拿小本本记下的Linux Shell常用技巧(一) https://zhuanlan.zhihu.com/p/73361101 一. 特殊文件: /dev/null和/dev/tty Linux系统提 ...

  7. 机器取代人类成为现实,Linux shell才可被取代?

    机器取代人类成为现实,Linux shell才可被取代? 新睿云 新睿云 新睿云-让云服务触手可及 本次笔者用通俗易懂的语言介绍一下Linux shell,由于笔者能力有限,如有有描述不准确的地方还请 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

随机推荐

  1. MapReduce与Yarn 的详细工作流程分析

    MapReduce详细工作流程之Map阶段 如上图所示 首先有一个200M的待处理文件 切片:在客户端提交之前,根据参数配置,进行任务规划,将文件按128M每块进行切片 提交:提交可以提交到本地工作环 ...

  2. 在Linux系统下有一个目录/usr/share/dict/ 这个目录里包含了一个词典的文本文件,我们可以利用这个文件来辨别单词是否为词典中的单词。

    #!/bin/bash s=`cat /usr/share/dict/linux.words` for i in $s; do if [ $1 = $i ];then echo "$1 在字 ...

  3. 利用shell脚本个性化运行jar任务

    利用shell脚本可以个性化运行jar任务,废话不多说,直接上代码: #!/bin/bash APP_PATH=/root/bigdata/jars/data_migration_from_sqlse ...

  4. css浮动产生和清除浮动的几种方式

    浮动的语法:float:left/right; 浮动float的原本设计了作用初衷是为了实现文字环绕效果 浮动产生负作用: 1.背景不能显示 2.边框不能撑开父元素 3.margin padding设 ...

  5. 用到的Dos命令总结 持续更新

    1.xcopy命令:复制的扩展命令     常用参数:/s:复制空文件夹 不使用可能会造成文件混乱    /y忽略覆盖提示 使用/y会直接覆盖全部 例子:xcopy lark-UI\dist C:\U ...

  6. jsonp 跨域Uncaught SyntaxError: Unexpected token :解决方法

    [jQuery]Ajax实现跨域访问JSON Ajax跨域访问JSON 环境:.net4.0+jQuery+JSON.net 因为在跨域实现,所以这里新建网站,这个网站只需要Ashx文件 public ...

  7. BS结构的一个注册用户的功能

    注册用户功能   学了Java一段时间,就想折腾折腾,就做了一个注册的功能,用HTML写了一个网页上的比较简陋的界面,用Java做了一个后台简陋的服务器处理数据,最后将数据存储到数据库中. 注册界面 ...

  8. Linux 命令之 mkdir

    mkdir的作用是创建一个目录,可以理解为 make directory 的缩写. 创建目录 mkdir dir_name 在当前目录创建一个名为 dir_name 的目录. 同时创建多级目录 假设现 ...

  9. Python3入门机器学习经典算法与应用☝☝☝

    Python3入门机器学习经典算法与应用 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 使用新版python3语言和流行的scikit-learn框架,算法与 ...

  10. redis安装及启动

    Redis 的安装及启动停止 下载 https://redis.io/download 软件copy至虚拟机中,常用的路径为/root/software 开始安装 安装gcc 目的是为了编译软件 yu ...