导读

关于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. AFN的坑--NSCachedURLResponse缓存

    网络正常的情况下,如果服务器宕机或者数据库出错,会造成访问服务器报错的情况,一般报错的内容是:无法连接到服务器或者其它错误.且服务器 修复后,仍然报错.经过排查,终于找出了原因所在:AFNetwork ...

  2. Uploadify 笔记分享 -- 2014年10月18日

    最近要做一个项目,有个部分需要用到Uploadify,以前用过,但不是很懂,找了无数遍的中文文档,发现好多都是以前的,都不能用,一时间索性自己写了个笔记,随用随查 <form> <i ...

  3. 【BZOJ2752】【线段树】高速公路

    Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站. Y901高速公路是一条由N-1段路以及N个 ...

  4. js事件练习--登录界面演示。

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. myeclipse spket spket-1.6.23.jar 破解安装教程

    一年前安装文档就写过了,今天写破解文档,本来开发js/ext是想用aptana的,但是安装包100多M,我还是用spket吧(才11M),这个需要破解一下license,否则用不了. 一 安装教程如下 ...

  6. Java中final、finally和finalize的区别(转)

    http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464746.html final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖, ...

  7. Spring Framework Reference,Documentation,spring英文文档.pdf 官方文档

    直接上链接:http://files.cnblogs.com/files/kongkaikai/spring-framework-reference.pdf 官网链接:http://docs.spri ...

  8. 辉哥用的这种方法实现ZABBIX的MYSQL批量监控

    不错的.集中和分布式,总是一对要解决的问题.应该可以再想更好的策略~~ 一.方案需求及思路 因跑MySQL服务的服务器比较多,并且每台服务器可能会运行多个不同端口的数据库,如果单独手动一台一台去修改a ...

  9. C# yield return 用法与解析

    原文:C# yield return 用法与解析 C# yield return 用法与解析 本文参考自:http://www.jb51.net/article/54810.htm 当初没有认真理解 ...

  10. oralce 仅配置精简客户端 连接plsql ( 版本需一直,要不都是32要不是都是64)

    1.Oracle服务器已经安装完成,版本10.2.0. 2.访问www.oracle.com,下载Oracle精简客户端. 下载页面地址:http://www.oracle.com/technetwo ...