导读

关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念、命令与操作做一个简要的记录,以备方便查找。

(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行)


目录
  1. 终端、shell 和 bash
  2. 常用的基础命令
  3. Linux Shell 的变量
  4. 编程语法 与 文本处理
  5. 正则表达式
  6. 进程相关
1、终端、shell 和 bash

详细的区别与联系:点这里

一个最简单的 “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

2、常用的基础命令

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 读取密码

文件和文件夹的基本操作:点这里

3、Linux Shell 的变量
普通变量:

例子:

 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 脚本语法:(条件、循环等)  点这里

4、编程语法 与 文本处理

由于这两部分内容相对较多,为避免文章篇幅过大,这两部分分别在具体的文章里记录。

编程语法:点这里

文本处理:点这里

5、正则表达式
概要

正则表达式在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:]_]+"

6、进程相关

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 编程(整体框架与基础笔记)的更多相关文章

  1. linux —— shell 编程(文本处理)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...

  2. linux —— shell 编程(编程语法)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...

  3. Linux Shell编程参考大全

    本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...

  4. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  5. 前端学习 linux —— shell 编程

    前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...

  6. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  7. Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||

    https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...

  8. linux shell 编程参考

    #!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...

  9. 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 共享内存 ...

随机推荐

  1. ZOJ 刷题记录 小黑屋 (`・д・´)

    P1006:模拟 然而我的同余方程能过样例然而就是WA⊙﹏⊙b [已查明:扩展欧几里得算法出了很隐蔽的问题] int exGcd(int x,int y,int& a,int& b) ...

  2. 【vc】6_菜 单

    1.菜单命令响应函数: 提示:MFC都是采用大写字母来标识资源ID号的:为了区分资源类型,一般遵循这样一个原则:在“ID”字符串后加上一个标识资源类型的字母.例:菜单资源(Menu):ID_Mxxx: ...

  3. Struts2中的链接标签 <s:url>和<s:a>---在action中获取jsp表单提交的参数(转)

    转自:http://sgl124764903.iteye.com/blog/444183 1.普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page ...

  4. 『重构--改善既有代码的设计』读书笔记----Introduce Foreign Method

    当你无法获得一个类的源代码或者没有权限去修改这个类的时候,你对于这种为你服务的类,你可能会出现需要别的需求的时候,比如一个Date类,你需要能够让他本身直接返回出他的后一天的对象,但他没有,这个时候你 ...

  5. 计算机天才Aaron Swartz 名作 《如何提高效率》——纪念真正的“hacker"!

    如何提高效率 <HOWTO: Be more productive>(如何提高效率)作者:Aaron Swartz 肯定有人跟你说过这样的话,“你有看电视的那么长时间,都可以用来写一本书了 ...

  6. 关于css float 属性以及position:absolute 的区别。

    1.float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.div一个典型的块 ...

  7. ThinkPHP 笔记

    1.循环中使用比较运算符 <volist name="subjects" id="v">       <option value=" ...

  8. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  9. Javascript Framework Scenario

    Mobile----- zepto, jQuery Scroll------ iscrollhttp://cubiq.org/iscroll-4 jo.js widget----- jquery pl ...

  10. GCD - Extreme (II)

    uva11424: 题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gc ...