zoukankan      html  css  js  c++  java
  • Linux学习笔记:shell

    本文更新于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
    
  • 相关阅读:
    低成本两台服务器备份,SQL SERVER数据库镜像(二)
    Entity Framework多表对一实体,一表对多实体的实现
    数字的与或非处理表中的多个状态(二)
    基于角色的权限原理
    数字与或非处理表中的多个状态(一)
    双服务器同步实施办法
    精彩博文收集目录索引
    个人文章目录索引
    Web常用函数介绍(LoadRunner相关)
    Rhythmbox中文乱码
  • 原文地址:https://www.cnblogs.com/garvenc/p/linux_learning_shell.html
Copyright © 2011-2022 走看看