本文更新于2020-01-02。

通配符

  • *:0个至无穷多个任意字符。
  • ?:1个任意字符。
  • [AB]:枚举中任意一个字符。
  • [A-B]:范围中任意一个字符。
  • [^AB]:任意一个不在枚举中的字符。
  • [^A-B]:任意一个不在范围中的字符。

特殊符号

  • #:注释符。该行其后的内容均视为注释。
  • \:转义符,并可将命令扩展至下一行。
  • |:管道符。将左侧命令的标准输出作为右侧命令的标准输入。右侧命令可以使用-来指代标准输入。
  • ||:左侧命令执行不成功,则执行右侧命令。否则不执行右侧命令。
  • ;:连续命令分隔符。
  • ~:用户主目录。
  • $:使用变量前导符。
  • &:作业控制符。将命令变为在后台工作。
  • $$:左侧命令执行成功,则执行右侧命令。否则不执行右侧命令。
  • !:逻辑非。
  • /:目录路径分隔符。
  • >:输出流重定向,替换内容。1为标准输出,2为标准错误输出。如:cat .bash_history &> /dev/null表示以替换方式重定向标准输出和标准错误输出。
  • >>:输出流重定向,追加内容。1为标准输出,2为标准错误输出。如 cat .bash_history >> /dev/null 2>&1表示以追加方式重定向标准输出和标准错误输出。
  • <:输入流重定向。0为标准输入。如:cat > /dev/null < .bash_history表示重定向标准输入。
  • <<:输入流重定向,指定输入结束字符串。0为标准输入。如:cat > /dev/null << ending表示指定标准输入结束字符串。
  • '':字符串。不能进行变量替换。
  • "":字符串。能进行变量替换。
  • ``:取执行命令内容。同$()
  • ():子shell的开始与结束。
  • {}:命令块组合。

变量

变量的设置规则如下:

  • 变量名与变量值以=连接,=两侧不能有空格。
  • 变量名只能是英文字母和数字,但不能以数字开头。
  • 可使用转义字符\
  • 变量值如有空格可使用""''引起,但""引起的特殊字符(如$)会使用其对应的值,而''引起的特殊字符仅为纯文本。可引起多行字符串。
  • 变量如需使用其他变量的值,可使用$NAME${NAME}(建议)。可使用${NAME[INDEX]}使用数组元素的值。
  • 变量值如需使用其他命令执行的值,可使用`COMMAND`或$(COMMAND)(建议)。
  • 变量值如需使用数值运算的值,可使用$((CALCULATION))
  • 如变量需在子进程使用,则需使用export将变量设置为环境变量。
  • 变量类型默认为字符串。
  • 通常大写变量为环境变量。

环境变量

  • HISTSIZE:history历史记录的最大条数。
  • HOME:用户主目录。
  • HOSTNAME:主机名。
  • HOSTTYPE:主机硬件类型。如:x86_64。
  • LANG:语系。
  • MACHTYPE:机器内核类型。如:x86_64-redhat-linux-gnu。
  • MAIL:mail读取的邮箱文件。
  • OSTYPE:操作系统类型。如:linux-gnu。
  • PATH:可执行文件的查找路径。以:分隔顺序查找。
  • PS1:命令提示符。
  • RANDOM:随机变量。
  • SHELL:shell可执行文件路径。
  • USER:用户名。

默认变量

  • #:去掉第0个命令行参数或函数参数的其余参数个数。
  • $:当前shell的PID。
  • -:set的设置。
  • 0,1,2,...:第N个命令行参数或函数参数。第0个参数为shell脚本文件名。
  • ?:上一个命令的返回码。通常执行成功返回0。
  • @:去掉第0个命令行参数或函数参数的其余参数。

shell script

第一行可使用#!声明该script使用的shell。如:#!/bin/bash

case

case $VAR in
"VALUE1")
DO1
;;
"VALUE2")
DO2
;;
*)
DO3
;;
esac

if

if CONDITION; then
DO
fi
if CONDITION; then
DO1
else
DO2
fi
if CONDITION1; then
DO1
elif CONDITION2; then
DO2
else
DO3
fi

CONDITION可为条件判断式[ OPTEST ]或使用&&||连接的多个条件判断式。下同。

for

for ((INIT;CONDITION;EACH))
do
DO
done

(())之间各值可以使用空格隔开,其中也可以使用i++i=i+1这种表达式。

for VAR in VALUE1 VALUE2
do
DO
done

VALUE*序列可为命令执行结果。

until

当条件为真时,退出循环。

until CONDITION
do
DO
done

while

当条件不为真时,退出循环。

while CONDITION
do
DO
done

function

函数必须先定义,再调用。

函数定义:

function FUNC () {
DO
}

函数调用:

FUNC PARAM1 PARAM2

Linux学习笔记:shell的更多相关文章

  1. linux/linux学习笔记-Shell基础(mooc)

    一.shell概述 shell根据ascII表,将命令翻译为0101...传给内核执行. 内核->shell翻译为命令->用户(操作的界面就是shell,shell=翻译官) linux标 ...

  2. Linux学习笔记 - Shell 函数的使用

    基本语法 funname () { action; return -)):如果不加,将以最后一条命令运行结果,作为返回值. } 示例1:定义并调用无返回值的函数 #!/bin/bash a= b= c ...

  3. Linux学习笔记 - Shell 控制语句

    if 语句 语法: #!/bin/bash a= b= if [ $a -eq $b ] then echo "a 等于 b" elif [ $a -gt $b ] then ec ...

  4. Linux学习笔记 - Shell 输出命令

    1. echo 命令 echo 是基本的shell输出命令,她的语法是: echo string 我们也可以使用她来定制一些输出的格式,具体如下: 输出普通字符串 echo "it is a ...

  5. Linux学习笔记 - Shell 运算符篇

    Shell 运算符分类 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 算数运算符 首先,使用 shell 算数运算符是,需要 ...

  6. Linux学习笔记 -- Shell 数组

    定义 在Shell的世界里,我们只能定义一维数组. 定义数组的时候不需要指定长度,数组的下标从0开始; Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: sh ...

  7. Linux学习笔记 -- Shell 变量

    定义变量 语法: 变量名=值 myVal= 需要注意一下变量明德规则: 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可以使用下划线(_). 不能使用标点符号. 不能使用bash里的关键字( ...

  8. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  9. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  10. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

随机推荐

  1. 数据库 Redis:Windows环境安装

    1. 下载 Redis (1)前往 GitHub 下载:https://github.com/microsoftarchive/redis (2)点击 release : (3)选择好版本号后,下载文 ...

  2. P1129 [ZJOI2007]矩阵游戏 二分图匹配

    思路:脑子+二分图匹配 提交:1次(课上讲过) 题解: 发现:如果符合题意,那么行和列一定是一一匹配的(必要条件),所以最大匹配必须是$n$. 同时我们发现,一定可以通过交换行列的方式,将(看起来)有 ...

  3. PHP mysqli_get_client_version() 函数

    定义和用法 mysqli_get_client_version() 函数将 MySQL 客户端库版本作为整数返回. MySQL 客户端库版本将按照以下格式返回: 主要版本*10000 + 次要版本*1 ...

  4. apply, bind, call--绑定this的方法

    Function.prototype.call(),Function.prototype.apply(),Function.prototype.bind() 是三种改变函数内部this指向(即函数执行 ...

  5. linux下pyenv的安装和使用

    一:pyenv介绍   项目地址:https://github.com/pyenv/pyenv   pyenv lets you easily switch between multiple vers ...

  6. Noip2011 提高组 Day1 T3 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  7. 初学Javascript,写一个简易的登陆框

    <!--下面是源代码--> <!DOCTYPE html> <html> <head> <meta charset = "utf-8&q ...

  8. 四、IO重定向和管道以及基本文本处理工具

    一.三种IO设备 程序:数据+指令 或 数据结构+算法程序必须能够读入输入然后经过加工来产生结果,其接受的输入可以是变量.数组.列表.文件等等,生产出来的结果可以使变量.数组.列表.文件等等.即:程序 ...

  9. shell脚本编程数组

    数组: 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为 ...

  10. 2.基于AOP自定义注解Annotation的实现

    上一篇中分析了AOP的实现原理, 总结为: 判断对象是否需要被代理?@Aspect注解的实现是根据切入点表达式 代理之后需要做什么,就是那些通知,本质上是实现了MethodInterceptor的拦截 ...