按关键词阅读: 编程语言 编程 Linux Bash 命令行
这里需要特别讲解一个标点符号 。 当你在命令行输入一条命令 , 按下回车键的时候 , 其实在命令的末尾有一个隐含的分号(;) 。 当一段 CLI shell 程序在命令行中被串起来作为单行指令使用时 , 必须使用分号来终结每个语句并将其与下一条语句分开 。 但 CLI shell 程序中的最后一条语句可以使用显式或隐式的分号 。
一些基本语法下面的例子会阐明这一语法规则 。 这段程序由单条命令组成 , 还有一个显式的终止符:
看起来不像一个程序 , 但它确是我学习每个新编程语言时写下的第一个程序 。 不同语言可能语法不同 , 但输出结果是一样的 。
让我们扩展一下这段微不足道却又无所不在的代码 。 你的结果可能与我的有所不同 , 因为我的家目录有点乱 , 而你可能是在 GUI 桌面中第一次登录账号 。
现在是不是更明显了 。 结果是相关的 , 但是两条语句彼此独立 。 你可能注意到我喜欢在分号前后多输入一个空格 , 这样会让代码的可读性更好 。 让我们再运行一遍这段程序 , 这次不要带结尾的分号:
输出结果没有区别 。
关于变量像所有其他编程语言一样 , Bash 支持变量 。 变量是个象征性的名字 , 它指向内存中的某个位置 , 那里存着对应的值 。 变量的值是可以改变的 , 所以它叫“变~量” 。
Bash 不像 C 之类的语言 , 需要强制指定变量类型 , 比如:整型、浮点型或字符型 。 在 Bash 中 , 所有变量都是字符串 。 整数型的变量可以被用于整数运算 , 这是 Bash 唯一能够处理的数学类型 。 更复杂的运算则需要借助 bc 这样的命令 , 可以被用在命令行编程或者脚本中 。
变量的值是被预先分配好的 , 这些值可以用在命令行编程或者脚本中 。 可以通过变量名字给其赋值 , 但是不能使用 $ 符开头 。 比如 , VAR=10 这样会把 VAR 的值设为 10 。 要打印变量的值 , 你可以使用语句 echo $VAR 。 变量名必须以文本(即非数字)开始 。
Bash 会保存已经定义好的变量 , 直到它们被取消掉 。
下面这个例子 , 在变量被赋值前 , 它的值是空(null) 。 然后给它赋值并打印出来 , 检验一下 。 你可以在同一行 CLI 程序里完成它:
注意:变量赋值的语法非常严格 , 等号(=)两边不能有空格 。
那个空行表明了 MyVar 的初始值为空 。 变量的赋值和改值方法都一样 , 这个例子展示了原始值和新的值 。
正如之前说的 , Bash 支持整数运算 , 当你想计算一个数组中的某个元素的位置 , 或者做些简单的算术运算 , 这还是挺有帮助的 。 然而 , 这种方法并不适合科学计算 , 或是某些需要小数运算的场景 , 比如财务统计 。 这些场景有其它更好的工具可以应对 。
下面是个简单的算术题:
好像没啥问题 , 但如果运算结果是浮点数会发生什么呢?
结果会被取整 。 请注意运算被包含在 echo 语句之中 , 其实计算在 echo 命令结束前就已经完成了 , 原因是 Bash 的内部优先级 。 想要了解详情的话 , 可以在 Bash 的 man 页面中搜索 “precedence” 。
控制运算符Shell 的控制运算符是一种语法运算符 , 可以轻松地创建一些有趣的命令行程序 。 在命令行上按顺序将几个命令串在一起 , 就变成了最简单的 CLI 程序:
只要不出错 , 这些命令都能顺利执行 。 但假如出错了怎么办?你可以预设好应对出错的办法 , 这就要用到 Bash 内置的控制运算符 ,&& 和 || 。 这两种运算符提供了流程控制功能 , 使你能改变代码执行的顺序 。 分号也可以被看做是一种 Bash 运算符 , 预示着新一行的开始 。
&& 运算符提供了如下简单逻辑 , “如果 command1 执行成功 , 那么接着执行 command2 。 如果 command1 失败 , 就跳过 command2 。 ”语法如下:
现在 , 让我们用命令来创建一个新的目录 , 如果成功的话 , 就把它切换为当前目录 。 确保你的家目录(~)是当前目录 , 先尝试在 /root 目录下创建 , 你应该没有权限:
上面的报错信息是由 mkdir 命令抛出的 , 因为创建目录失败了 。 && 运算符收到了非零的返回码 , 所以 cd 命令就被跳过 , 前者阻止后者继续运行 , 因为创建目录失败了 。 这种控制流程可以阻止后面的错误累积 , 避免引发更严重的问题 。 是时候讲点更复杂的逻辑了 。
当一段程序的返回码大于零时 , 使用 || 运算符可以让你在后面接着执行另一段程序 。 简单语法如下:
解读一下 , “假如 command1 失败 , 执行 command2” 。 隐藏的逻辑是 , 如果 command1 成功 , 跳过 command2 。 下面实践一下 , 仍然是创建新目录:
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2TS2020.html
标题:Bash|怎样用 Bash 编程:语法和工具( 二 )