如何查询文件里的某个字符串?
grep “字符串” 文件
例:grep "abc" tmp.txt
 
如何将查询出来的内容赋给变量?
str=$(grep "abc" tmp.txt) 
 
如何打印变量的值?
echo $varname
注:要想引用变量,最好写成${varname}的形式
 
如何在屏幕上输出提示,让用户输入y或n来选择进行下一步?
echo -n "Continue?"
read ANS
case $ANS in
y|Y|yes|Yes)
    要执行的语句
    ;;
n|N|no|No)
    exit 0
    ;;
esac
注:read从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量。
 
如何将命令在屏幕输出的同时也写入文件?
命令 | tee 文件
或:
your_script.sh 2>&1 | tee 文件
 
如何让光标在屏幕上显示在命令之后的位置而不是下一行?
echo -n “命令”是取消echo之后自带的换行符
 
如何启用控制字符?
echo -e “a\tb\tc\nd\te\tf”
 
如何注释多行代码?
:<<COMMENT
    要注释的code
COMMENT
或在vim中,:50,70 s/^/#可注释从50行到70行的内容
 
如何不执行脚本,只检查语法?
sh -n your_script
 
如何调试?
sh -x your_script
会显示所有变量,并执行脚本
 
如何产生随机数?
a=RANDOM
echo $a
 
注意:
无论有多少缩进,EOT一定要顶格写。
等号两边不能有空格。
if [ xxx ]; then xxxx; fi 括号和内容之间必须有一个空格。
调用函数只是fun,没有括号与分号。
shell中的一切变量都是字符串类型。
变量多于一个单词的话,必须用双引号。
显示特殊字符,比如就想显示$a,可用单引号。
局部变量必须以local声明。全局变量没有什么修饰。
所有写入/dev/null的信息都消失了,不会保存在磁盘里。如果将标准输出和错误重定向到/dev/null,就能让终端闭嘴。
类似于/dev/null,/dev/zero也是个伪文件,会产生一个null流,是二进制的0流。
输出到/dev/tty的信息只会显示在当前工作的终端显示器上。
$#代表传入函数的参数个数,$@代表所有参数
0 表示标准输入,1 表示标准输出,2 表示错误输出
为了展示一段memu以供客户选择,可以使用select关键字
 
【截取字符串】

截取要求中的“最左”与“最右”
注意:pattern只能是从最左开始匹配,如果不包含第一个字符,那么就不能工作。
${variable#pattern} - 截去从最左开始匹配的最短符合pattern的子串
${variable##pattern} - 截去从最左开始匹配的最长符合pattern的子串

${variable%pattern} - 截去从最右开始匹配的最长符合pattern的子串
${variable%%pattern} - 截去从最右开始匹配的最长符合pattern的子串

例如:
variable="Now is the time"
echo ${variable} // 打印出 Now is the time
echo ${variable#N*i} // 打印出 s the time
echo ${variable##N*i} // 打印出 me
echo ${variable%time} // 打印出 Now is the
echo ${variable%%t*e} // 打印出 Now is

语法:${variable:offset:length}
例如:
var="hello"
var=${var:3:2}
echo $var //打印出 "lo"

 

【SHELL特殊的元字符】
*(pattern1|pattern2) 0次或者多次触发
例如,*([0-9]) 0个或者多个数字
?(pattern1|pattern2) 0次或者1次触发
例如,?([0-9]) 0个或者1个数字
+(pattern1|pattern2) 1次或者多次触发
@(pattern1|pattern2) 仅仅1次触发
!(pattern1|pattern2) 1次都不触发
例如,!(err*|fail*)表示,不能以“err”或者"fail"开头的词

【保留变量】

$IFS  这个变量中保存了用于分割输入参数的分割字符,默认识空格。
$HOME  这个变量中存储了当前用户的根目录路径。
$PATH  这个变量中存储了当前 Shell 的默认路径字符串。
$PS1  表示第一个系统提示符。
$PS2  表示的二个系统提示符。
$PWD  表示当前工作路径。
$EDITOR 表示系统的默认编辑器名称。
$BASH  表示当前 Shell 的路径字符串。
$0, $1, $2, ... 表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
$#   表示脚本程序的命令参数个数或函数的参数个数。
$$   表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。
$?   表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
$*   表示所有的脚本参数或函数参数。
$@   和 $* 涵义相似,但是比 $* 更安全。
$!   表示最近一个在后台运行的进程的进程号。

【参考文献】

Shell脚本调试技术 http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html

一个程序演示所有的shell编程知识 http://code.google.com/p/ldd6410/wiki/ShellScript

Linux Shell Scripting Tutorial A Beginner‘s handbook  http://www.freeos.com/guides/lsst/

Shell脚本笔记的更多相关文章

  1. shell脚本笔记(原创不断记录)

    今天开始自己的shell脚本练习,刚好公司有太服务器,要时间对数据的cp是按月的: 考虑:首先寻找规律,发现都放置在/opt/www/aaa/  里面有很多的2级和3级目录和文件,但我追踪要备份的是年 ...

  2. Shell脚本笔记(七)控制Shell脚本

    控制Shell脚本 一.处理信号 1) SIGHUP本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. ...

  3. Shell脚本笔记(一)一些零碎的基础知识

    一些零碎的基础知识 一.认识Shell脚本 一)相关概念 Shell是一种命令解释器,作用是按次序执行(遇到子脚本,先执行子脚本的命令)用户输入的命令和程序. Shell脚本语言是弱类型语言,与其他脚 ...

  4. Shell脚本笔记(二)Shell变量

    Shell变量 一)全局环境变量 全局变量对于定义它的shell和其子shell都是可见的,但如果生成它的shell被终止,全局变量也就消失了.另外全局变量会被子shell的同名变量覆盖. #定义一个 ...

  5. Shell脚本笔记 1

    函数别名 设置别名 alias name="command" alias ll="ls -laS" 取消别名 unalias name 求取数学表达式 valu ...

  6. Linux shell脚本笔记

    shell 命令解释器 是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的shell Linux 启动过程: BIOS -> MBR -> BootLo ...

  7. 学习shell脚本笔记

    1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...

  8. Shell脚本笔记(六)呈现数据

    呈现数据 一.文件描述符 Linux系统将每个对象当做文件处理,这包括输入和输出进程.Linux用文件描述符来标识每个文件对象.每个进程最多可以有9个 文件描述符,bash shell保留了前三个文件 ...

  9. Shell脚本笔记(三)shell中的数学计算

    shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...

随机推荐

  1. C中的宏

    1. 简单宏定义 简单的宏定义有如下格式: [#define指令(简单的宏)] #define  标识符替换列表 替换列表是一系列的C语言记号,包括标识符.关键字.数.字符常量.字符串字面量.运算符和 ...

  2. Qt 学习 之 二进制文件读写

    在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice提供了read().readLine()等基本的操作.同时,Qt 还提供了更高一级的操作:用于二进制的 ...

  3. PencilDraw: 用简化的C语言画图!

    最近做的一个东西,不过功能还不是太完善,而且界面极丑.慢慢改进吧. 点这里打开!

  4. Exam(贪心)

    Exam Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. FFmpeg源码结构图 - 解码

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

  6. STL之如何选择顺序容器

    一.顺序容器的分类 顺序容器:vector向量.list链表.deque双端队列: 优先级最高的是vector向量,它的速度比较快,优点最多: 在程序设计中,容器可以切换: #include < ...

  7. css中的定位

    上一篇博客,我大概介绍了下浮动的使用及行为.其实在整个文档布局中,定位也对我们整个的页面排版有非常好的帮助,当然前提是使用得当. 一.定位分类: a.静态定位  position:static;   ...

  8. Web Deploy发布网站一条龙解决方案

    Web Deploy工具对于ASP.NET开发人员来说一定不陌生,没有用过也经常见到,Web Deploy发布十分方便而且在发布时会帮助用户检验发布文件的正确性.接下来介绍一下基础使用. 第一步:安装 ...

  9. [Swust OJ 138]--文件压缩

    题目链接:http://acm.swust.edu.cn/problem/138/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  10. ContentType

    常用的 ContentType XML <% response.ContentType ="text/xml" %>  GIF images <% respons ...