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
    评论
一套目前来说最好的nestjs实战教程,提供QQ长期问答服务. 本人从 08 年到 18 年一直从事于 PHP 的开发。从 18 年开始转向 Typescript+React+Nestjs 的技术栈。目前来说 React 应该是一个非常好用的前端框架,生态非常完善,并且十分灵活简单。Nestjs 则是 Node.js 中唯一且无敌存在的后端 web 框架。因为我个人从事这套技术栈开发已经 4 年多,所以颇有心得,做了这套 React18 视频教程和 Nestjs 实战视频教程。现在视频教程也是刚刚开始做了一部分,还在持续更新。使用 TS 全栈开发可以基本涵盖各种平台的方方面面,比如开发桌面应用的 Electron, 开发小程序的 Taro, 开发 Spa 中后台的 React,开发 SSR 网站的 next.js,开发移动应用的 React Native, 开发 CLI 的 Yargs, 以及开发后端的 Nestjs。基本学会一套,全面够用,再加上 Monorepo 组织结构,一个仓库所有平台都可以搞定。 包含以下知识点 - 掌握Nestjs框架的依赖注入,模块,提供者,生命周期等概念- 掌握DTO数据验证,响应序列化,异常过滤器等常用功能- 学会编写一些常用的class-validator验证约束- 熟练掌握Typeorm以及Nestjs与Typeorm结合开发- 学会整合Swagger输出Open API文档- 掌握TS装饰器以及反射元数据的定义和使用- 编写一些数据库相关的数据验证约束(比如树形表的同级别某字段唯一验证等)- 学会通过继承并魔改Nestjs源码编写自定义的全局验证器- 可以编写自定义的配置系统以及核心功能包- 学会自定义的代码组织方式(比如教程中我把默认的Nestjs应用改成Util+PluginModule模式)- 掌握编写一些常用的Util仓库(比如数据库,Redis,Restful)- 利用Yargs结合魔改后的框架可以编写一些自定义CLI命令(比如数据迁移,数据填充等)- 掌握如何利用阿里云/腾讯云推送邮件和短信- 掌握使用消息列队(MQ)的方式异步推送邮件和短信- 掌握守卫原理以及编写一些用户验证的守卫- 编写一个完善的用户系统(JWT认证,短信/邮件登录,短信/邮件注册,找回密码,绑定手机和邮箱等)- 熟练地通过编写装饰器去实现一些常用的功能- 通过SSE,WebSockets实现用户的上线,下线以及消息实时推送,消息广播等- 学会使用云存储来上传文件- 学会大文件断点雪川- 实现RBAC的权限系统- 理解请求范围概念以及性能方便的考量- 自己构建配置系统,实现配置验证以及通过YAML或数据库来进行动态配置- 通过适用Vscode进行Debug以及编写Jest测试来提升开发效率与程序的可用性- 学会使用Node来编写自定义的CLI命令- 利用NestCURD进行快速开发- 学会Graphql替代Restful写API- 使用Mongodb替代关系型数据库- 掌握一些常用的打包工具,比如通过ncc打包成单文件,通过pack打包成二进制等- 学会一些常用的部署方式,比如通过nginx+pm2反向代理部署,devops自动化CI,CD等- 学会使用pnpm workspaces来使用monreopo组织代码
`.bash_profile` 文件是在 Bash shell 中的用户配置文件之一,用于在启动终端时自动执行一些命令或设置一些环境变量。下面是在 Mac 上 `.bash_profile` 文件的语法: 1. 添加注释 在 `.bash_profile` 文件中添加注释可以帮助你和其他人理解你在做什么。注释以 `#` 开头,可以单独一行,也可以放在命令的后面。 例如: ``` # 设置 PATH 环境变量 export PATH=/usr/local/bin:$PATH ``` 2. 定义变量 在 `.bash_profile` 文件中可以定义变量,例如: ``` export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home ``` 3. 设置别名 在 `.bash_profile` 文件中可以设置别名,例如: ``` alias ll='ls -alF' ``` 这里设置了一个名为 `ll` 的别名,执行 `ll` 命令实际上会执行 `ls -alF` 命令。 4. 执行命令 在 `.bash_profile` 文件中可以直接执行命令,例如: ``` echo "Hello, World!" ``` 这里执行了一个 `echo` 命令,输出 `Hello, World!`。 5. 向 PATH 环境变量中添加目录 在 `.bash_profile` 文件中可以向 PATH 环境变量中添加目录,例如: ``` export PATH=/usr/local/bin:$PATH ``` 这里向 PATH 环境变量中添加了 `/usr/local/bin` 目录。 6. 使用 if 语句 在 `.bash_profile` 文件中可以使用 if 语句进行条件判断,例如: ``` if [ -d "/usr/local/mysql/bin" ]; then export PATH="/usr/local/mysql/bin:$PATH" fi ``` 这里判断了 `/usr/local/mysql/bin` 目录是否存在,如果存在则将其添加到 PATH 环境变量中。 注意,修改了 `.bash_profile` 文件后需要重新加载才能生效,可以执行以下命令使其生效: ``` source ~/.bash_profile ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值