Bash 是brian Fox在1988年1月10号出于Richard Stallman的建议而写的。

 

一、 运行模板:

  • 交互登陆的shell,登陆后bash会读取和执行/etc/profile。
  • 然后依次读取~/.bash_profile,~/.bash_login,~/.profile,发现第一个能执行的,执行之。退出登陆时,会读取和执行~/.bash_logout.
  • 交互非登陆式启动,会读取和执行~/.bashrc.
  • bash_history中存储了执行过的cmd.

       作用:在执行前后允许用户挂上自定义的逻辑,并可以由每个用户进行自定义。

 

二、操作快捷键:

  • 移动类

         Ctrl+a:移动光标到行起始位置。

         Ctrl+e:移动光标到行末位置。

         Alt+f:以词形式向前移动光标

         Alt+b:以词形式向后移动光标

  • 信号类

          Ctrl+c: 对当前任务发出SIGINT信号,使其中止并退出。

          Ctrl+z:对在foreground任务发送信号SIGTSTP让其暂停。

  • 编辑类

          Tab:自动补全

          Ctrl+k:删除光标之后字符,并拷贝到clipboard中。

          Ctrl+u:删除光标之前字符,并拷贝到clipboard中。

          Ctrl+y:拷贝clipboard的内容插入光标位置

          Ctrl+_:回退修改。

          Ctrl+t:交换光标之前的两个字符。

 

三、 执行模型:

 

  1. 剧场:

  Shell 执行环境是一个剧场,剧场有舞台(foreground)和后台(background),有许多剧目(task)可以在舞台上表演,舞台上只有一个剧目(fg task)在被人欣赏,其它剧目在后台排演(bg task),直到用户想看到它并替换当前剧目(fg,bg指令)。

 

    2. 规则:

  • 在某一时刻只有一个命令在foreground执行,Shell控制权只有foreground的命令执行完之后才回到用户。
  • 命令后带上&,表示background执行命令,不影响用户交互。还可以执行其它指令。
  • 在fg执行的cmd可以按ctrl+z让其suspend.Suspend的指令可以用fg和bg来让其恢复执行。

 

3. 困惑:

 

   完成一件工作执行的命令比较多,一条一条敲没完没了?可以把命令合在一起写成一个脚本文件来执行。

 

四、 脚本语法

  1. Expansion:
  • brace expansion a{b,c,d}e 扩展为’abe ace ade’
  • tilde expansion
  • parameter expansion
  • command substitution

2.  Quoting:有expanish就有quoting.quoting有三种:

  • escape character:保留其紧跟的字符的字面意义。
  • 单引号:保留单引号对里字符的字面意义。单引号即使转义也不能出现在单引号对里。
  • 双引号:保留双引号对除$(parameter expanision ),’,\,!外字符的字面意义。

五、 例子

 

   Cron(一个执行计划任务的服务)的启动文件

   /etc/init.d/crond

 

   1: #! /bin/bash

   2: #

   3: # crond          Start/Stop the cron clock daemon.

   4: #

   5: # chkconfig: 2345 90 60

   6: # description: cron is a standard UNIX program that runs user-specified \

   7: #              programs at periodic scheduled times. vixie cron adds a \

   8: #              number of features to the basic UNIX cron, including better \

   9: #              security and more powerful configuration options.

  10: # processname: crond

  11: # config: /etc/crontab  

  12: # pidfile: /var/run/crond.pid

  13:  

  14: # Source function library.

  15: . /etc/init.d/functions

  16: . /etc/sysconfig/crond

  17: t=${CRON_VALIDATE_MAILRCPTS:-UNSET}

  18: [ "$t" != "UNSET" ] &;& export CRON_VALIDATE_MAILRCPTS="$t"

  19:  

  20:  # See how we were called.

  21:  

  22:  prog="crond"

  23:  

  24:  start() {

  25:       echo -n $"Starting $prog: "

  26:           if [ -e /var/lock/subsys/crond ]; then

  27:           if [ -e /var/run/crond.pid ] &;& [ -e /proc/`cat /var/run/crond.pid`     ]; then

  28:           echo -n $"cannot start crond: crond is already running.";

  29:           failure $"cannot start crond: crond already running.";

  30:           echo

  31:           return 1

  32:           fi

  33:      fi

  34:       daemon crond $CRONDARGS

  35:       RETVAL=$?

  36:       echo

  37:       [ $RETVAL -eq 0 ] &;& touch /var/lock/subsys/crond;

  38:       return $RETVAL

  39:   }

 

  • 第一行#!/bin/bash表示当前脚本的解释器是bash.
  • 第2-14行是注释(comment)。
  • 第15,16表示加载执行相应的脚本。
  • 第18行就是shell里经典的写法了,很简练,称之为List,以&&,;,&,||隔开。在一般语言里形式如下:

         if( “$t”!=”UNSET”)

        export CRON_VALIDATE_MAILRCPTS="$t"

       “”表示一种quote,里面允许执行prameter expanision.将t的值替换 $t.

  • 第24行start(){}表示函数定义
  • 第26-33行检查文件锁的存在,如果存在,检查pid文件以及进程是否存在,如果存在,退出。
  • 第34行启动crond
  • 第35行RETVAL=$? $?意思是刚执行完的foreground命令的status,也就是启动crond的进程的返回结果。
  • 第36行如果为0,启动成功,更新锁状态返回结果

Bash CookBook(一)--基础的更多相关文章

  1. bash中一些基础知识

    bash是linux操作系统的shell.以下是Multi-Perspective Sentence Similarity Modeling论文实现时碰到的一个bash: #!/bin/bash py ...

  2. Bash脚本编程基础

    为实现某个任务,将许多命令组合后,写入一个可执行的文本文件的方法,称为Shell脚本编程. 按照应用的Shell环境不同,可以将Shell脚本分为多种类型.其中最常见的是应用于Bash和Tcsh的脚本 ...

  3. Linux上bash的部分基础特性:

    命令补全: tab shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令 命令查找机制: 查找内部命令: 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名 ...

  4. bash编程-Shell基础

    1. Shell脚本执行方式 直接运行,需要在脚本文件头部指定解释器,如#!/bin/bash ./myshell.sh 运行时指定shell解释器 bash myshell.sh 2. Shell命 ...

  5. Bash编程(1) 基础

    1. 基本知识 (1) $HOME: 当前用户的家目录 (2) `pwd`或$PWD:当前目录 (3) 脚本命名避免使用test,通过type -a test,可以查看所有匹配test的命令 gas@ ...

  6. bash脚本编写基础

    bash脚本编程     命令的堆砌     脚本程序:解释器解析执行     shell:交互式接口,编程环境         shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...

  7. linux学习19 shell脚本基础-bash脚本编程基础及配置文件

    一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...

  8. bash cookbook

    目录 简介 变量 静态变量 变量操作 数组 应用 四则运算 条件测试 整数测试 文件测试 字符测试 组合条件测试 选择语句 循环语句 for--有限循环 while--无线循环 until conti ...

  9. 五.Bash Shell编程基础入门实战

    知识回顾 运行脚本我们一般用sh 不用单独去加执行权限 OLDBOY=10只适用当前环境 局部变量 export OLDBOY把它设置为临时的环境变量应为已经=10了所以不用export OLDBOY ...

随机推荐

  1. CSS内容简单归纳

    具体内容请查阅<CSS参考手册> 一.CSS模块介绍 1.1 CSS1中定义了网页基本属性 字体.颜色.补白.基本选择器等 1.2 CSS2中在CSS1的基础上添加了高级功能 浮动和定位. ...

  2. RK3288 OTG切换为Host模式

    OTG = On The Go,是USB的一种工作模式 USB协议中规定了两类设备,一类是Host.一类是Device. Host为主控设备,如PC,Device为从设备,如鼠标.U盘等,Device ...

  3. Windows下搭建Nginx图片服务器

    在项目最开始,上传图片的时候,服务器先保存原图再使用ImageMagick生成上传图片缩略图,这种方法有很多缺点,例如生成的缩略图的大小是固定的,不能动态请求指定大小的缩略图. 虽然有非常多的图片云存 ...

  4. 将h264和aac码流合成flv文件

    在视频应用中,经常需要将接收到h264和aac数据保存成文件. 本来想用mp4格式,但是mp4在没有正常关闭的情况下会导致文件打不开,而在实际应用中经常会出现设备直接拔电,程序不是正常结束的情况.于是 ...

  5. ubuntu64,ndk-r9 编译 ffmpeg 2.1.1的config文件

    #!/bin/bash NDK_ROOT=/home/wjh/fox/android-ndk-r9c/ PREBUILT=${NDK_ROOT}toolchains/arm-linux-android ...

  6. Java虚拟机(一)之开篇

    写此类文章的初始动机:被同事问道 jvm 是做什么时,竟然茫然以对: 按照惯例,从 what/where/how 等开篇,即: 一. JVM 的目的是什么? 二. JVM 是什么时候被以何总形式被安装 ...

  7. 数据结构与算法JavaScript描述——使用队列

    1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...

  8. nginx基于TCP的反向代理

    一.4层的负载均衡 Nginx Plus的商业授权版开始具有TCP负载均衡的功能.从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请.也就是说,Nginx除了 ...

  9. 线程组ThreadGroup

      ThreadGroup线程组表示一个线程的集合.此外,线程组也可以包含其他线程组. 线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组. 允许线程访问有关自己的线程组的信息,但 ...

  10. 多分类下的ROC曲线和AUC

    本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明.如果对ROC和AUC二分类下的概念不是很了解,可以先参考下这篇文章:http://blog.c ...