zoukankan      html  css  js  c++  java
  • Bash CookBook(一)--基础

    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,启动成功,更新锁状态返回结果
  • 相关阅读:
    mysql 查看数据库及表大小以及数据库扩容评估
    idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
    mybatis plus 中增删改查及Wrapper的使用
    mybatis plus 主键策略
    搭建 spring boot + mybatis plus 项目框架并进行调试
    jeecg datagrid重新指定数据源
    java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的
    java 实现敏感词(sensitive word)工具详解使用说明
    java 日志脱敏框架 sensitive,优雅的打印脱敏日志
    互联网公司OpenAPI链接
  • 原文地址:https://www.cnblogs.com/jinspire/p/3842134.html
Copyright © 2011-2022 走看看