linux —— shell 编程(整体框架与基础笔记)
| 导读 |
关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念、命令与操作做一个简要的记录,以备方便查找。 (本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) |
| 目录 |
详细的区别与联系:点这里
一个最简单的 “Hello world” 显示 程序:
#! /bin/bash
echo "Hello world"
echo.sh
#!/bin/bash 的作用:说明是用哪一个shell 来解释文件,如果没写,默认使用 $SHELL 里设置的shell
#! 可以用来指定不同的命令解释器,比如我们指定 rm 程序, 以下是一个自删除脚本:
#!/bin/rm
# 自删除脚本
# 当你运行这个脚本时,基本上什么都不会发生...... 当然这个文件消失不见了
WHATEVER =
echo "This line will never print"
exit $WHATEVER #脚本不会执行上面这几句
#!/bin/rm
echo:显示一个字符串
pwd:打印当前工作目录
whereis: 查看与程序相关的路径
source: 在当前的环境下执行指定的脚本文件,其执行结果会影响当前环境,比如执行的脚本 中cd执行会影响当前工作目录
more 或 less : 以翻页的方式查看文件,less 相比与 more 多了一些功能上的特性
cat: (连接文件)将文件输出到标准输出
head | tail: 输出文件的头或尾的一部分
grep: 打印符合特定模式的行
> | : 重定向 和 管道
ls 显示当前目录下的文件(ll 等)
read: 从标准中读取一行
printf "Enter new password:"
stty-echo
read poss < /dev/tty
printf "Enter again"
read pass2 < /dev/tty
......
例子:/dev/tty 读取密码
文件和文件夹的基本操作:点这里
例子:
vname="content"
echo "$vname"
echo '$vname'
变量赋值:= 的两边不能有任何空格
变量援引:line 2 显示 “content” ;line 3 显示 “$vname”
数值变量运算:
let "var += 4"
var=$(($var + 4))
unset:从当前shell删除变量或函数
export:修改当前进程的环境变量
env:显示环境中的环境变量和对于的值
注意:env 和 set 函数不同。env函数显示的是环境变量,而set显示的是所有本地变量,包括用户的环境变量。
环境变量相关文件的设置:点这里
shell 脚本语法:(条件、循环等) 点这里
由于这两部分内容相对较多,为避免文章篇幅过大,这两部分分别在具体的文章里记录。
编程语法:点这里
文本处理:点这里
正则表达式在UNIX/Linux 系统中有广泛的结合与应用,用来强化工具本身的功能。常见的 UNIX 下支持正则表达式的工具有:
- 用于匹配文本行的 grep 工具族
- 用于改变输入流的 sed 流编辑工具(steam editor)
- 用于处理字符串的语言,如 awk 、python 、perl 、Tcl 等语言
- 文件查看程序,或分页程序,如more ,page,less
- 文本编辑器,如 ed,vi, emacs,vim 等
gerp 族有曾有三种版本:
grep 最早的文本匹配程序。使用 POSIX 支持的基本正则表达式 (Basic Regular Expression, BRE)
egrep 拓展的grep 。使用拓展正则表达式 (Extended Regular Expression,ERE)
fgrep 快速grep (fast/fixed grep)。这个版本用于匹配固定字符串而不是正则表达式
1992 年 POSIX标准 将其合而为一,只推荐使用grep,其他用参数来支持。
正则表达式中有两种基本字符匹配,特殊字符(meta Character , 元字符)和一般字符。
POSIX BRE 和 ERE 都支持的meta字符:
^ 锚定行或字符串的开始。BRE仅在正则表达式的结尾处有意义,ERE在正表达式的任何地方都
有特殊意义(.*^word 在ERE有效,但是意义?)
$ 锚定行或字符串的结尾。在BRE 与 ERE的区别同上
. 匹配一个非换行符的字符。
* 匹配先前字符任意多个,包括0
[...] 方括号表达式(Bracket Expression ),匹配方括号里任意一个字符 [^A-FH-Z] 表示匹
配大写字母G和其他除大写字母外的字符/
\ 用于打开或关闭后续字符的特殊含义。如 \(\)
POSIX BRE 和ERE 支持不同的meta字符
仅 BRE:
\(\) \(\)两个符号之间的模式被储存在保留空间(Holding Space),在后续通过转义引用,最多储
存9个。\(a\).*\1 表示2个a中间有任意字符的串。
\n 与上面的\(\)结合使用,n为1~9
x\{m,n\} x表示模式,表示x出现m~n次,x\{n\} 表示出现n次,x\{m,\} 表示出现至少m次
仅 ERE:
x{m,n} 同上一条
+ 相比* , 不包括0
? 匹配0个或1个
| 匹配前面 “或” 后面的正则表达式
() 匹配使用括号括起来的正则表达式群,如 (a.*a)|(b.*b) 表示匹配2个a中间有任意字符的串 或 2个b的情况。
GNU 版本 的grep 支持额外的 meta字符:
\< 锚定单词的开始(不仅仅是行的开始)
\> 锚定单词的结束
\w 匹配文字和数字字符,等价于 [A-Za-z0-9]
\W \w 的反义
\b 锁定单词,如“\bgrep\b”只匹配前后有空格或行开始与行结束的串
为了在不同国家的字符编码中保持一致,POSIX (The Portable Operating System Interface)增加了特殊的字符类:
[:alnum:] A-Za-z0-9
[:alpha:] 文字字符
[:blank:] space 和 tab
[:digit:] 数字
[:graph:] 非空字符(非空格、控制字符)
[:lower:] 小写字符
[:cntrl:] 控制字符
[:print:] 可打印字符,非空字符(包括空格)
[:punct:] 标点符号
[:space:] space 和tab 和 换行符
[:upper:] 大写字符
[:xdigit:] 十六进制数 (0-9,a-f ,A-F)
这样就可以使用[:alpha:]匹配中文了;上面字符使用的时候必须置于[] 中才能成为正则表达式。
比如匹配数字字母下划线: grep -E "[[:digit:][:alpha:]_]+"
ps: 显示当前进程的快照 (常用参数 aux 或 -elf )
pstree: 打印进程结构
top : 显示系统的进程
后台方式启动程序:command &
jobs: 查看当前会话的作业状态 (-l 参附加地显示任务的进程号)
Ctrl-Z: 可以使前台任务挂起暂停执行
bg: (将当前作业带入后台) 对于后台挂起暂停的进程,转到后台继续执行; 使用 %jobID 参数可以指定具体的进程
fg: 将后台进程 (由+号指定) 置于前台
stty tostop : 如果后台具有终端输出。该命令强制停止该作业
kill -l : 列出所有进程调度信号
nice: 以指定的优先级启动一个程序
crontab 和 at :调度例程或单个(一次)系统任务。
产生信号的方式:
1) 终端按键:Ctrl+C: SIGINT Ctrl+Z:SIGSTOP Ctrl+\:SIGQUIT
2) 通过系统调用:kill -SIGTERM 45624 | kill -9 4546
3) 通过函数(软件):kill(SIGTERM,456465);
linux —— shell 编程(整体框架与基础笔记)的更多相关文章
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- Linux Shell编程参考大全
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- 前端学习 linux —— shell 编程
前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
- linux系统编程之框架
linux系统编程之框架: 1. 进程 1.1 进程概念 1.1.1 PCB 1.1.2 环境变量 1.2 进程控制 1.3 进程间通信 1.3.1 管道 1.3.2 有名管道 1.3.3 共享内存 ...
随机推荐
- JS 通过系统时间限定 动态添加 select option
虽然是个简单的效果,还是需要积累一下,记录一下: 在八月一号之后,删除最后一项,新添加2016级 — — 2015级 2014级 2013级 2012级 在六月一号之后,删除最后一项,新添加2016级 ...
- Windows的命令行怎么支持通配符
摸索出一个小技巧,虽然Windows的命令行本身不支持通配符,但可以在脚本里把传进来的参数当通配符用 只要加上@ARGV = glob "@ARGV";就行了 @ARGV = gl ...
- hibernate映射关系之多对多
多对多: * 关系在第三张表中,和两张表本身没有关系 * 多对多谁维护关系:谁都能维护关系(效率是一样的),一般情况下可以通过页面 来体现 * 关系体现: 第三张表的维护:增加.删除 course类对 ...
- extern "C" {} 来沟通C和C++
比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名. 通常,在C语言的头 ...
- 递归 与 js 对象的引用
<script> //递归 function test(n) { if (n == 1) { return 1 } console.log(n) return n * test(n - 1 ...
- MS SQL SERVER 2008 R2 实例服务启动出现10048错误解决办法
由于个人癖好,把MSSQLSERVER服务禁止了开机启动,每次需要的时候就输入CMD命令开启.今天在开启的时候,系统提示“发生服务特定错误:10048”. 于是打开SQL Server配置管理器,发现 ...
- Wdcp缺少mod_rewite模块
1.下载apache源码包,解压并查找到mod_rewrite.c文件 tar -zxvf httpd-2.2.27.tar.gz cd httpd-2.2.27 [root@localhost ht ...
- js的引用顺序
注意:Bootstrap中的JS插件依赖于JQuery,因此JQuery要在Bootstrap之前引用!!! 把JS文件引用放入body的最下面,是为了使js在网页全部加载完后才起作用,比如你的js里 ...
- hdu 5135 Little Zu Chongzhi's Triangles
http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...
- 尼玛的,不学ORACLE RAC就不能叫高大上啊
刚才趁这段时间和机会,进去好好套弄一下. 我看不得会ORACLE人的嘴脸,于是,,,,我想试试~~~