156. 【Linux】shell 脚本进阶(一)
重要回顾
- 在创立 shell 脚本文件时,必需在文件的第一行指定要使用的 shell。其格式为,
#!/bin/bash
shell 脚本的关键在于输入多个命令并解决每个命令的结果,甚至需要将一个命令的结果传给另一个命令。shell 可以让你将多个命令串起来,一次执行完成。假如要两个命令一起运行,可以把它放在同一行中,彼此间用分号隔开。
- 客户变量
客户变量可以是任何由字母、数字或者下划线组成的文本字符串,长度不超过 20 个,客户变量区分大小写,所以变量 Var1 和变量 var1 是不同的。这个小规矩经常让脚本编程初学者感到头疼。
使用等号将值赋给客户变量。在变量、等号和值之间不能出现空格(另一个困扰初学者的用法)。
shell 脚本会自动决定变量值的数据类型。在脚本的整个生命周期里,shell 脚本中定义的变量会一直保持着它们的值,但在 shell 脚本结束时会被删除掉。
进阶内容
1. 命令替换
shell 脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋值给变量。把输出赋给变量之后,即可以随便在脚本中使用了。这个特性在解决脚本数据时尤为方便。有两种方法可以将命令输出赋给变量:
- 反引号(`)
testing=`date`
- $()格式
testing=$(date)
PS:在命令行提醒符下使用路径 ./ 运行命令的话,也会创立出子 shell;要是运行命令的时候不加入路径,就不会创立子 shell。假如你使用的是内建的 shell 命令,并不会涉及子 shell。在命令行提醒符下运行脚本时肯定要留心!
2. 输出重定向
最基本的重定向将命令的输出发送到一个文件中。bash shell 用大于号(>)来完成这项功能。
date > test6
假如输出文件已经存在,重定向操作符会用新的文件数据覆盖已有文件。
有时,你可能并不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,比方你正在创立一个记录系统上某个操作的日志文件。在这种情况下,可以用双大于号(>>)来追加数据。
who >> test6
PS:原来双大于号(>>)是用来追加数据的。
3. 输入重定向
内联输入重定向符号是远小于(<<)。除了这个符号,你必需指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必需一致。
在命令行上使用内联输入重定向时,shell 会用 PS2 环境变量中定义的次提醒符来提醒输入数据。次提醒符会持续提醒,以获取更多的输入数据,知道你输入了作为文本标记的那个字符串。
wc << EOF> test string 1> test string 2> test string 3> EOF
这里用到的 wc 命令的作用是对数据中的文本进行计数。默认情况下,它会输出 3 个值:
- 文本的行数
- 文本的词数
- 文本的字节数
PS:以前在看技术博客时,一直对【<< EOF】的用法很不解,而后又不知道是什么意思,也不知道怎样百度(当然了,也不想百度,毕竟一般来说找技术博客时是为了更重要更紧急的工作上的事)。现在算是彻底明白了,以下是内联输入重定向(inline input redirection)(好了,知道这叫啥了)的命令格式:
command << markerdatamarker
也就是说,EOF 可以替换成任意其余字符串。它的作用只是作为一个结束的标记。比方,
可以看到结果【3 9 42】和上面是一样的,都是 3 行,9 个单词,42 个字节。
4. 管道
和命令替换所用的反引号(`)一样,管道符号在 shell 编程之外也很少用到。管道被放在命令之间,将一个命令的输出重定向到另一个命令中:
command1 | command2
不要以为由管道串起的两个命令会依次执行。Linux 系统实际上会同时运行这两个命令,在系统内部将它们连接起来。在第一个命令产生输出的同时,输出回被立即送给第二个命令。数据传输不会用到任何中间文件或者缓冲区。
5. 执行数学运算
bash shell 为了保持跟 Bourne shell 的兼容而包含了 expr 命令,但它同样也提供了一种更简单的方法来执行数学表达式。
在 bash 中,在将一个数学运算符结果赋给某个变量时,可以用美元符合方括号($[ operation ])将数学表达式围起来。注意在使用方括号来计算公式时,不用担心 shell 会误会乘号或者其余符号。shell 知道它不是通配符,由于它在方括号内。
var1=$[ 1 + 5 ]echo $var1var2=$[ ${var1} * 2 ]echo ${var2}
PS:bash shell 数学运算支持整数运算。若要进行任何实际的数学运算,这是一个巨大的限制。
一点废话,技术党略过
最近在学习《Linux 命令行与 shell 脚本编程大全》,花了两天时间把最基础的那部分过完了,之前学习过,这次过知识点时,很轻松,巩固了下知识,也从中学习到了以前遗漏的,和掌握的不好的知识。比方 vim 的少量高级用法,详见上一篇155. 【Linux】 vim 文本编辑器。
这次学习到“构建基本脚本”时,收获同样很大,可能是之前学习的不牢固,但我更觉得这正是证实了自己的学习方法是非常契合自己的!这块以后有机会再好好聊聊。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 156. 【Linux】shell 脚本进阶(一)