基于Ubuntu的Linux学习[shell编程]

1.定义

解释性的脚本语言,批量处理命令使用,类似windows下的.bat文件。属于Linux内核的一个外层保护工具,负责完成用户和内核之间交互。

2.查看

cat /etc/shells

3.规则

  • 新建shell文件:vim + .sh后缀
  • 运行环境设置:第一行 #!/bin/bash(声明shell类型bash shell)或者 #!/bin/sh
  • 脚本语句编写:shell命令+系统命令,注释行以#开头
  • 设置可执行性chmod +x xx.sh
  • 脚本的运行:shell命令程序执行;使用”.”执行脚本;直接执行具有可执行权限的脚本
  • 执行脚本文件
    • 解析方式:xx.sh
    • ./xx.sh 需要执行权限
    • . xx.sh 需要执行权限

Shell中的括号

Shell中的括号有其特殊的用法,现总结如下:

1. 符号$后的括号

  • ${a} 变量a的值,在不引起歧义的情况下可以省略大括号。
  • $(cmd) 命令替换,结果为shell命令cmd的输出,和 `cmd` 效果相同,不过某些Shell版本不支持$()形式的命令替换,如tcsh。
  • $((exp)) 和 `expr exp` 效果相同,计算数学表达式exp的数值,其中exp只要符合C语言的运算规则即可,甚至三目运算符和逻辑表达式都可以计算。

2. 多条命令执行

  • (cmd1;cmd2;cmd3) 新开一个子shell顺序执行命令cmd1,cmd2,cmd3,各命令之间用分号隔开,最后一个命令后可以没有分号。
  • { cmd1;cmd2;cmd3; } 在当前shell顺序执行命令cmd1,cmd2,cmd3,各命令之间用分号隔开,最后一个命令后必须有分号,第一条命令和左括号之间必须用空格隔开。
  • 对{}和()而言,括号中的重定向符只影响该条命令,而括号外的重定向符影响到括号中的所有命令。

3. 双括号的特殊用法

  • (()) 增强括号的用法,常用于算术运算比较。双括号中的变量可以不使用$符号前缀,只要括号中的表达式符合C语言运算规则,支持多个表达式用逗号分开。比如可以直接使用 for((i=0;i<5;i++)),如果不使用双括号,则为 for i in \seq 0 4` 或者 for i in {0..4}。再如可以直接使用 if (($i<5)),如果不使用双括号,则为 if [ $i -lt 5 ]`。
  • [[ ]] 增强方括号用法,常用于字符串的比较。主要用于条件测试,双括号中的表达式可以使用&&、   、<、>等C语言语法。比如可以直接使用 if [[ $a != 1 && $a != 2 ]],如果不使用双括号,则为 if [ $a -ne 1 ] && [ $a != 2 ] 或者 if [ $a -ne 1 -a $a != 2 ]

Updated: