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:交换光标之前的两个字符。
三、 执行模型:
- 剧场:
Shell 执行环境是一个剧场,剧场有舞台(foreground)和后台(background),有许多剧目(task)可以在舞台上表演,舞台上只有一个剧目(fg task)在被人欣赏,其它剧目在后台排演(bg task),直到用户想看到它并替换当前剧目(fg,bg指令)。
2. 规则:
- 在某一时刻只有一个命令在foreground执行,Shell控制权只有foreground的命令执行完之后才回到用户。
- 命令后带上&,表示background执行命令,不影响用户交互。还可以执行其它指令。
- 在fg执行的cmd可以按ctrl+z让其suspend.Suspend的指令可以用fg和bg来让其恢复执行。
3. 困惑:
完成一件工作执行的命令比较多,一条一条敲没完没了?可以把命令合在一起写成一个脚本文件来执行。
四、 脚本语法
- 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(一)--基础的更多相关文章
- bash中一些基础知识
bash是linux操作系统的shell.以下是Multi-Perspective Sentence Similarity Modeling论文实现时碰到的一个bash: #!/bin/bash py ...
- Bash脚本编程基础
为实现某个任务,将许多命令组合后,写入一个可执行的文本文件的方法,称为Shell脚本编程. 按照应用的Shell环境不同,可以将Shell脚本分为多种类型.其中最常见的是应用于Bash和Tcsh的脚本 ...
- Linux上bash的部分基础特性:
命令补全: tab shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令 命令查找机制: 查找内部命令: 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名 ...
- bash编程-Shell基础
1. Shell脚本执行方式 直接运行,需要在脚本文件头部指定解释器,如#!/bin/bash ./myshell.sh 运行时指定shell解释器 bash myshell.sh 2. Shell命 ...
- Bash编程(1) 基础
1. 基本知识 (1) $HOME: 当前用户的家目录 (2) `pwd`或$PWD:当前目录 (3) 脚本命名避免使用test,通过type -a test,可以查看所有匹配test的命令 gas@ ...
- bash脚本编写基础
bash脚本编程 命令的堆砌 脚本程序:解释器解析执行 shell:交互式接口,编程环境 shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...
- linux学习19 shell脚本基础-bash脚本编程基础及配置文件
一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...
- bash cookbook
目录 简介 变量 静态变量 变量操作 数组 应用 四则运算 条件测试 整数测试 文件测试 字符测试 组合条件测试 选择语句 循环语句 for--有限循环 while--无线循环 until conti ...
- 五.Bash Shell编程基础入门实战
知识回顾 运行脚本我们一般用sh 不用单独去加执行权限 OLDBOY=10只适用当前环境 局部变量 export OLDBOY把它设置为临时的环境变量应为已经=10了所以不用export OLDBOY ...
随机推荐
- bzoj1588[HNOI2002]营业额统计——双向链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1588 简单Splay.但用双向链表做.很好的思路. 1.(离线)按值排序,记下pre和nxt ...
- 19.Selenium+Python生成测试报告
1.代码如下所示: from selenium import webdriver import unittest import HTMLTestRunner class BaiduSearch(uni ...
- 函数参数个数不确定时使用va_start
今天在网上看程序时忽然发现别人的函数参数中有省略号,甚是吃惊,发现其函数中使用了va_start,经过查资料大概明白其用法,个人觉得很好用! #include <stdio.h> #inc ...
- JAVA-Unit05: 视图、序列、索引 、 约束
Unit05: 视图.序列.索引 . 约束 视图 数据库对象之一 视图在SQL语句中体现的角色与表相同, 但它并非一张真实存在的表,它对应的 是一个查询语句的结果集. 创建一个查看10号部门员工信息的 ...
- FPGA图像加速解决方案来了
近日,百度云与联捷计算科技(CTAccel)共同推出基于FPGA的图像加速解决方案(CIP,CTAccel Image Processor),实现对JPEG转码JPEG.JPEG转码WebP(M6)等 ...
- (转)Inno Setup入门(十二)——Pascal脚本(1)
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250917 事件函数(1) Inno Setup支持以下函数和过程 ...
- Linux 发展史
操作系统 英文名称为operating system,简称os,是应用程序运行及用户操作必备的基础环境支撑,计算机系统的核心,作用是管理和控制计算机系统中的硬件和软件资源 操作系统就是处于用户与计算机 ...
- JAVA中的IO流介绍(2)
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端, ...
- sqlldr加载 数据文件的字段超出最大长度
SQLLOAD数据的时候,建表给的字段给够了,建表已经给到VHARCHAR2(1024)了,实际数据是VHARCHAR2(256).加载报错"数据文件的字段超出最大长度"查了半天, ...
- 未注册在本地的Windows 2008 / Windows 7 X64的:'Microsoft.Jet.OLEDB.4.0'提供
在服务器上部署项目的时候遇到如下错误:'Microsoft.Jet.OLEDB.4.0'提供在本地没有注册 服务器是WIN2008 导致这个错误主要有几个原因: 1,服务器上没有装MS Excel中的 ...