导读

关于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. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  2. [LeetCode OJ] Gas Station

    问题描述: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...

  3. TatukGIS - GisDefs - CheckFileWriteAccess 函数

    函数名称  CheckFileWriteAccess 所在单元  GisDefs 函数原型           1  function CheckFileWriteAccess(const _file ...

  4. 那些年被我坑过的Python——山外有山(第四章)

    装饰器: 定义: 本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 优点: 装饰器带来的最直观的好处:减少对函数的细化 ...

  5. openerp service install

    cp  openerp.init  to   /etc/init.d/openerp update-rc.d   openerp default PATH=/sbin:/usr/sbin:/bin:/ ...

  6. Python Tutorial 学习(五)--Data Structures

    5. Data Structures 这一章来说说Python的数据结构 5.1. More on Lists 之前的文字里面简单的介绍了一些基本的东西,其中就涉及到了list的一点点的使用.当然,它 ...

  7. Java 内部类种类及使用解析

    package com.learnjava.innerclass; class MemberInner { private int d = 1; private int a = 2; // 定义一个成 ...

  8. SharePoint 2013 WebTemplates

    SharePoint 2013 WebTemplates You are here: Home / SharePoint 2013 WebTemplates   January 24, 2013 Ta ...

  9. cortex m0 lpc1114的NVIC中断如何使用

    LPC1114单片机的NVIC中断函数,有开中断.关中断.设置优先级.挂起等操作函数.这些函数位于core_cm0.h文件里面.比如开中断的函数如下: /** \brief Enable Extern ...

  10. Delphi中ADO异步执行方式

    当ADO开始处理数据后,应用程序必须等到ADO处理完毕之后才可以继续执行.但是除了同步执行方式之外,ADO也提供了异步执行的方式,允许当ADO处理时,应用程序仍然能够先继续执行.而当ADO处理数据完毕 ...