linux shell 小技能
环境:
[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 小技能的更多相关文章
- Linux通用小技能
Linux通用小技能 前言 无论你用ubuntu还是centos,通通没问题,运维这东西,踩坑写文档就是了. 小技能 新磁盘挂载 不管是阿里云还是腾讯云,还是自己的机器,请记住这条命令. mkfs.e ...
- Linux Shell 小脚本经典收藏
原文:http://www.cnblogs.com/Javame/p/3867686.html 1.在两个文件中找出相同的号码 diff -y xx.txt oo.txt | egrep -v &qu ...
- 普及一个Linux的小技能~Ctrl+Z切换到后台运行
逆天Linux一直是自己摸索的,几年下来也小有心得,前不久PC也换成Ubuntu了,但毕竟不是专门搞运维的,有些知识还是有死角 这不,今天发现了个小技巧,来和大家分享一下: 比如运行一个交互式的程序: ...
- Linux Shell 小知识
${} ——变量替换 通常 $var 与 ${var} 没有区别,但是用 ${} 会比较精确的界定变量名称的范围. name='Ace' echo "result1: my name is ...
- [转]Linux shell中的那些小把戏
我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本 ...
- [转帖]拿小本本记下的Linux Shell常用技巧(一)
拿小本本记下的Linux Shell常用技巧(一) https://zhuanlan.zhihu.com/p/73361101 一. 特殊文件: /dev/null和/dev/tty Linux系统提 ...
- 机器取代人类成为现实,Linux shell才可被取代?
机器取代人类成为现实,Linux shell才可被取代? 新睿云 新睿云 新睿云-让云服务触手可及 本次笔者用通俗易懂的语言介绍一下Linux shell,由于笔者能力有限,如有有描述不准确的地方还请 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux Shell 重定向与管道【转帖】
by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...
随机推荐
- 如何安装PHPstorm并配置php运行环境运行php项
php是程序开发者常用的编程语言,那么它就需要一款简单实用的集成开发环境,也就是一款舒服的编辑器,今天笔者为大家介绍phpstorm这款软件,并详细的讲解如何用它配置php项目 工具/原料 笔 ...
- B-概率论-贝叶斯决策
目录 贝叶斯决策 一.贝叶斯决策理论 二.贝叶斯公式 2.1 从条件概率公式推导贝叶斯公式 2.2 从全概率公式推导贝叶斯公式 三.贝叶斯公式应用 更新.更全的<机器学习>的更新网站,更有 ...
- Python 3.8.0 正式版发布,新特性初体验
北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PEP 572: Assignment Expressi ...
- C# 获取顶级(一级)域名方法
/// <summary> /// 获取域名的顶级域名 /// </summary> /// <param name="domain">< ...
- stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED
转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...
- Huffman树及其编解码
Huffman树--编解码 介绍: Huffman树可以根据输入的字符串中某个字符出现的次数来给某个字符设定一个权值,然后可以根据权值的大小给一个给定的字符串编码,或者对一串编码进行解码,可以用于 ...
- Go语言及Beego框架环境搭建
在开始环境搭建之前,我们先一起来看看: Go有什么优势: 不用虚拟机,它可直接编译成机器码,除了glibc外没有其他外部依赖,部署十分方便,就是扔一个文件就完成了. 天生支持并发,可以充分的利用多核, ...
- 流水线机制、滑动窗口协议、GBN、SR
一.滑动窗口协议 为了解决停等操作的性能问题(发了一个分组之后一直等到确认了这个分组才发下一个),推出了流水线机制,提供资源利用率.就是允许发送方在收到对方的ACK前,发送多个分组 其中窗口是一个范围 ...
- java和JavaScript的注释区别
今天在学习JavaScript的注释时候,想到了跟java注释对比一下有什么区别?下面详细的对比了一下. java的注释 java在使用注释的时候分为3种类型的注释. 单行注释:在注释内容前加符号 “ ...
- python selenium鼠标滑动操作
先安装pyautogui: pip install pyautogui #coding=utf-8 import pyautogui from selenium import webdriver fr ...