欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux学习笔记:shell

程序员文章站 2022-04-10 22:04:47
本文更新于2019 06 12。 [TOC] 通配符 :0个至无穷多个任意字符。 ?:1个任意字符。 [AB]:枚举中任意一个字符。 [A B]:范围中任意一个字符。 [\^AB]:任意一个不在枚举中的字符。 [\^A B]:任意一个不在范围中的字符。 特殊符号 \ :注释符。该行其后的内容均视为注 ......

本文更新于2019-06-12。

通配符

  • *: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