十、 shell基础
shell的表现形式:
history
-c 清空历史命令(清空缓存;默认:1000条)
-w 将缓存中的历史命令保存到配置文件中
~/.bash_history 永久保存历史命令(默认:1000条)
! 数值 调用指定条数的历史命令
↑↓ 光标键 调用原来执行过的历史命令
!关键词 调用最近一次以此关键词开头的历史命令
!! 执行上一次命令
输入输出重定向
标准输入(键盘): /dev/stdin [设备标识号:0] 通过键盘向服务器发送指令
标准正确输出: /dev/stdout [设备标识号:1] ls命令输出的结果
标准错误输出: /dev/stderr [设备标识号:2] lss命令输出的结果
模拟标准输入:echo "123456" | passwd --stdin username 非交互式修改密码
1. 输入重定向
① "<"
wc < 统计行数 (常规写法:wc abc)
cpio -idvcu < *.cpio
patch -pn < *patch
② " << "
# wc << abc
> asjdg 7y8 hbm,.dd k,2 '
> alskjd 'd 2 dasld '
> abc
2 10 44
wc "<<" abc 统计指定关键词范围内的信息 标准输出(显示器)
连接符号
选项连接符:
-a :find /etc -name "init*" -a -type f
-o :find /etc -size -4K -o -size +10M 不取从4K到10M大小的文件
命令连接符:
-exec :find /etc -name "init*" -a -type f -exec ls -l {} \;
-ok :find /tmp -name "init*" -a -type f -ok rm -rf {} \;
| :ls -l /etc/ | more 分页显示/etc/目录下的所有文件的长格式信息
echo "--help" | cat
echo "--help" |xargs cat
#将echo --help 当做cat命令的选项执行
find /etc -name "init*" -a -type f |xargs ls -l
#将find所查询到的命令结果(任务流方式)使用|xargs传递给后面的命令
; :无逻辑关系连接符
&& :有逻辑关系,符号前的命令必须执行成功,才执行符号后的命令
|| :有逻辑关系,符号前的命令若执行成功,则不执行符号后的命令
符号前的命令若执行不成功,则执行符号后的命令
[ "$a" == "abc" ] && echo yes || echo no
当a=abc时,输出yes,否则,输出no
grep 提取包含关键词的行 (行提取命令)
grep "关键词" 文本文件或文本流
正则表达式
-An 在关键词行向下显示n行
-Bn 在关键词行向上显示n行
find 在指定范围(目录)内查询符合条件的文件名&路径
-name
-type
-user -group
-nouser 查询没有所有者的文件
-[acm]time -[acm]min
-size
-perm
-a -o
默认精确查询 -name abc.txt
模糊查询:通配符
-name "*abc.txt" 用到通配符的需要用双引号引用
echo [选项] [输出内容]
-e 支持反斜线控制的字符转换
-n 取消输出后行尾的换行符号
Bash特殊符号
| 序号 | 标识格 | 说明 |
|---|---|---|
| 1 | '' | 其内的只是一个普通字符,原来的特殊含义失效 |
| 2 | "" | 其内的几乎是所有字符为一个普通字符,原来的特殊含义失效 |
| 3 | `` | 调用指定命令的结果 |
| 4 | $() | 调用指定命令的结果 |
| 5 | () | 其内执行的命令都在新开的子shell中执行 |
| 6 | [] | 条件判断公式 |
| 7 | {} | 其内执行的所有命令,与当前shell中无异,但格式更严谨 |
| 8 | # | 注释 |
| 9 | $ | 在bash shell中调用变量 |
| 10 | \ | 针对命令的转意符 |
Bash特殊颜色
| 文字颜色 | 30黑 | 31红 | 32绿 | 33黄 | 34蓝 | 35紫 | 36青 | 37白 |
| 底纹颜色 | 40黑 | 41红 | 42绿 | 43黄 | 44蓝 | 45紫 | 46青 | 47白 |
| 特殊显示 | 0关闭 | 1高亮 | 4下划线 | 5闪烁 | 7反显 | 8消影 |
颜色设置:如 \e[1;41;33m \e[0m
⑴ '' :所有被单引号所引用的字符,都只是一个普通字符,原来的特殊含义失效
echo '$PATH' $在单引号中没有调用变量的功能了
⑵ "" :几乎是所有被双引号引用的字符,都只是一个普通字符,原来的特殊含义失效,除($ \ ``)
echo "$PATH" $在双引号中被调用时,是有效的
⑶ `` 和 $() :调用指定命令的结果
time=$(date)
abc=`ls *`
# echo `date`
2018年 07月 03日 星期二 09:10:28 CST
# echo "`date`"
2018年 07月 03日 星期二 09:10:37 CST
# echo '`date`'
`date`
⑷ () :所有在小括号内执行的命令,都是在新开启的子shell中执行的,不会影响当前shell,当小括号内的命令执行完成时,新开启的子shell自动结束消失
⑸ {} :所有在大括号中执行的命令,都是在当前shell中执行的,与不加括号无异。大括号要严格遵循格式: { name=lisi;echo $name;}
a、大括号的左括号和第一条命令之间需要留一个空格
b、大括号内最后一条命令结尾需要使用;结束
# { name=lisi;echo $name;}
# (name=zhangsan;echo $name) 在子shell中执行
⑹ [] :条件判断公式
① [ "$abc" != "10" ] #在进行 == 和 != 进行判断时,必须遵循以下a、b两个原则
# == 和 != 是用来判断字符和字符串,不是用来判断数值的。
a、括号两侧必须留有一个空格
b、判断符号两侧必须留有空格
② [ -f /etc/bashrc ]
-f 判断指定对象是否存在,判断该文件是否是普通文件
[ -f /etc/bashrc ] && source /etc/bashrc
⑺ # :在shell中是注释的意思,在文本内不生效,作为备注和注解
拓展:并不是所有的注释都是不生效的,有些注释代表默认就生效(/etc/ssh/sshd_config)
;
//
<!-- -->
/* */
⑻ $ :调用指定变量的值,在bash shell中是这样的,其他shell中不一定
echo "$PATH"
⑼ \ :将所有的特殊字符和字符串转义为普通字符和字符串(针对命令)
变量声明
命令:declare [+/-] [选项] 变量
- : 给变量设定类型
+ : 取消变量的类型
-a : 将变量声明成数组型
-i : 将变量声明成整数型
-r : 将变量声明成只读(变量值不能修改,也不能删除,更不能取消只读选项)
-x : 将变量声明成环境变量
-p : 显示指定变量的类型及内容
正则表达式
(1) 正则表达式:
| * | 前一个字符任意多次(*前边必须有一个字符) | 基础正则表达式 |
| . | 匹配任意一个字符 | 基础正则表达式 |
| ^ | 限制行首 | 基础正则表达式 |
| $ | 限制行尾 | 基础正则表达式 |
| [] | 其内任意一个字符,[A-Za-z][0-9][^0-9][abc][a-cdf] | 基础正则表达式 |
| \{n\} | 前一个字符重复0到n次 | 基础正则表达式 |
| \{n,\ | 前一个字符至少重复n次及以上 | 基础正则表达式 |
| \{n,m\} | 前一个字符重复n次以上m次以下 | 基础正则表达式 |
| + | 前一个字符一次或多 | egrep |
| ? | 前一个字符0次或一次 | egrep |
| | | 分支符号(或者) | egrep |
| () | 其内为一个整体匹配一个字符 | egrep |
注:当用到egrep时“\{\}”中的反斜杠取消
(2) 基础正则表达式:
* 匹配前一个字符任意多次(连续)
*前一个字符连续出现了多少次(*前边必须有一个字符)
. 匹配任意一个字符(除去换行符以外)
若某文本要过滤包含. 的行,则需要使用转义符将.的特殊含义取消
grep "\." /sh/passwd
^ 匹配行首
$ 匹配行尾
grep "\.$" /sh/passwd #过滤以.结尾的行
grep -v "^$" /sh/passwd #取消文本的空白行
[] 匹配括号内的任意一个字符
[0-9] [a-zA-Z] [^0-9] #尽量不要使用[a-Z]
注:除了连接符 - 以外,不可以使用其他符号
\{n\} # 过滤必须出现指定次数的行
\{n,\}
# grep "a\{0,\}" passwd | wc -l
# grep "a*" passwd | wc -l
\{,n\}
\{n,m\}
# grep "o\{2,3\}" /sh/passwd
(3) 扩展正则表达式:
指定匹配的前一个字符出现的次数(类似于*)
在使用egrep 或 grep -E 时,不需要使用转义符
+ 匹配前一个字符一次或任意多次
? 匹配前一个字符0次或1次
| 分支符号(或者)
(4) 正则表达式过滤手机号码和ip
1. 中国手机号码:
以1开头,11位连续的数字
grep "1[0-9]\{10\}" sj.txt
每行中只有手机号的:
grep "^1[0-9]\{10\}$" sj.txt
中国联通:130、131、132、 145、 155、156、 185、186
拆分:
13[012][0-9]{8}
145[0-9]{8}
1[58][56][0-9]{8}
组装:1(3[012]|45|[58][56])[0-9]{8}
2.IP范围0-255
拆分(怎么容易写正则匹配怎么拆分):
0-9 [0-9]
10-99 [1-9][0-9]
100-199 1[0-9][0-9]
200-249 2[0-4][0-9]
250-255 25[0-5]
组装:egrep "[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]" b
过滤IP
^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
十、 shell基础的更多相关文章
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- 十大基础排序算法[java源码+动静双图解析+性能分析]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
随机推荐
- upc组队赛3 T-net【贪心】
T-net 题目描述 T-net which is a new telecommunications company, plans to install its base stations in th ...
- Vue环境搭建及第一个helloWorld
Vue环境搭建及第一个helloWorld 一.环境搭建 1.node.js环境安装配置 https://www.cnblogs.com/liuqiyun/p/8133904.html 或者 htt ...
- UVA_548Tree
这是一个很经典的建树,然而当时不会!!!! 给你一个中序和后序 先建一个二叉树,然后找最优解(最优解就是一个叶子节点到根节点权值最小, 同时本身权值最小) //生成一棵树 int build(int ...
- UVA11988_Broken Keyboard (a.k.a. Beiju Text)
即将dfs()放到打印本段字符的后面 不过汝佳书上面说是用链表写的,无意中用递归写出来了,而且写的挺简单的,代码不复杂,写这个博客主要是想记住递归这种神奇的方法 平时递归搜索时候,dfs()的在其他代 ...
- 基于MFC的Media Player播放器的制作(1---播放器界面的布局)
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 通过上面的一些预备知识,我们现在就可以自己来制作基于MFC的播放器了,接下来我们讲的是使用MFC制作我们播放器 的界面. 首先,我们我们打 ...
- Gitlab CI持续集成 - GitLab Runner 安装与注册
GitLab Runner安装 需要添加gitlab官方库: # For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/ ...
- python面试题之补充缺失的代码
补充缺失的代码 def print_directory_contents(sPath): """ 这个函数接受文件夹的名称作为输入参数, 返回该文件夹中文件的路径, 以及 ...
- 一、最新Kafka单节点部署+测试 完整
每次学一个东西从基础的开始,循序渐进. 不急不躁,路还很长. 所有教程都是学习汪文君大神的kafka教程的. 一.部署 这里选的kafka版本是 0.10.2.1 下载连接 https://dow ...
- 写MySQL存储过程实现动态执行SQL
转自:http://www.cnblogs.com/william-lin/archive/2013/03/19/2968727.html--存储过程名和参数,参数中in表示传入参数,out标示传出参 ...
- spring中配置Properties对象的方法
工作中有必要将Properties对象进行注解进入:比如 class Person{ @Autowired private Properties properties; } 如果有这种需求的话,那么需 ...