Bash最基本的语法

Bash最基本的语法
循环和条件判断—Bash
Vim快捷键
运算符----Bash
数组----Bash
字符串—Bash
变量----Bash

Bash最基本的语法

echo命令

echo命令的作用是在屏幕输出一行文本,可以将该命令的参数原样输出。

  • echo -n 默认情况下,会有回车符;参数-n会取消回车符

    $ echo a;echo b
    a
    b
    
    $ echo -n a;echo b
    ab
    
  • echo -e -e参数会解释引号(双引号和单引号)里面的特殊字符(比如换行符\n)。如果不使用-e参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释它们,原样输出。

    $ echo "Hello\nWorld"
    Hello\nWorld
    
    # 双引号的情况
    $ echo -e "Hello\nWorld"
    Hello
    World
    
    # 单引号的情况
    $ echo -e 'Hello\nWorld'
    Hello
    World
    

type 命令

Bash 本身内置了很多命令,同时也可以执行外部程序。怎么知道一个命令是内置命令,还是外部程序呢?

type命令用来判断命令的来源。

$ type echo
echo is a shell builtin
$ type ls
ls is hashed (/bin/ls)

上面代码中,type命令告诉我们,echo是内部命令,ls是外部程序(/bin/ls)。

  • type -a 查看一个命令的所有定义
  • type -t可以返回命令的类型:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)。

[start-end]扩展

方括号扩展有一个简写形式[start-end],表示匹配一个连续的范围。比如,[a-c]等同于[abc][0-9]匹配[0123456789]

# 存在文件 a.txt、b.txt 和 c.txt
$ ls [a-c].txt
a.txt
b.txt
c.txt

# 存在文件 report1.txt、report2.txt 和 report3.txt
$ ls report[0-9].txt
report1.txt
report2.txt
report3.txt
...

下面是一些常用简写的例子。

  • [a-z]:所有小写字母。
  • [a-zA-Z]:所有小写字母与大写字母。
  • [a-zA-Z0-9]:所有小写字母、大写字母与数字。
  • [abc]*:所有以abc字符之一开头的文件名。
  • program.[co]:文件program.c与文件program.o
  • BACKUP.[0-9][0-9][0-9]:所有以BACKUP.开头,后面是三个数字的文件名。

这种简写形式有一个否定形式[!start-end],表示匹配不属于这个范围的字符。比如,[!a-zA-Z]表示匹配非英文字母的字符。

$ echo report[!1–3].txt
report4.txt report5.txt

上面代码中,[!1-3]表示排除1、2和3。

{start…end} 扩展

大括号扩展有一个简写形式{start..end},表示扩展成一个连续序列。

这个写法的另一个常见用途,是直接用于for循环。

for i in {1..4}
do
  echo $i
done

上面例子会循环4次。

字符类

[[:class:]]表示一个字符类,扩展成某一类特定字符之中的一个。常用的字符类如下。

  • [[:alnum:]]:匹配任意英文字母与数字
  • [[:alpha:]]:匹配任意英文字母
  • [[:blank:]]:空格和 Tab 键。
  • [[:cntrl:]]:ASCII 码 0-31 的不可打印字符。
  • [[:digit:]]:匹配任意数字 0-9。
  • [[:graph:]]:A-Z、a-z、0-9 和标点符号。
  • [[:lower:]]:匹配任意小写字母 a-z。
  • [[:print:]]:ASCII 码 32-127 的可打印字符。
  • [[:punct:]]:标点符号(除了 A-Z、a-z、0-9 的可打印字符)。
  • [[:space:]]:空格、Tab、LF(10)、VT(11)、FF(12)、CR(13)。
  • [[:upper:]]:匹配任意大写字母 A-Z。
  • [[:xdigit:]]:16进制字符(A-F、a-f、0-9)。

字符类的第一个方括号后面,可以加上感叹号!

量词语法

量词语法用来控制模式匹配的次数。

量词语法有下面几个。

  • ?(pattern-list):匹配零个或一个模式。
  • *(pattern-list):匹配零个或多个模式。
  • +(pattern-list):匹配一个或多个模式。
  • @(pattern-list):只匹配一个模式。
  • !(pattern-list):匹配零个或一个以上的模式,但不匹配单独一个的模式。
$ ls abc?(.)txt
abctxt abc.txt

上面例子中,?(.)匹配零个或一个点。

$ ls abc?(def)
abc abcdef

上面例子中,?(def)匹配零个或一个def

$ ls abc+(.txt|.php)
abc.php abc.txt

上面例子中,+(.txt|.php)匹配文件有一个.txt.php后缀名。

$ ls abc+(.txt)
abc.txt abc.txt.txt

上面例子中,+(.txt)匹配文件有一个或多个.txt后缀名。

量词语法也属于文件名扩展,如果不存在可匹配的文件,就会原样输出。

# 没有 abc 开头的文件名
$ ls abc?(def)
ls: 无法访问'abc?(def)': 没有那个文件或目录

上面例子中,由于没有可匹配的文件,abc?(def)就原样输出,导致ls命令报错。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值