持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
新建一个脚本文件并进入编辑 vim 4-1.sh,vim命令主要是进入编辑,如果不存在此文件则创建
进入脚本编写,首行不要忘了
写的脚本也是经典 key=value 的键值对
- 变量名区分大小写(也就是说变量名HELLO跟hello是两个不同的变量)
- =左右两边不能有空格(键值对是key=value形式,不能在其间加空格,比如key= value)
- 单引号包围的字符串中不对特殊符号做解释执行
- 双引号包围的字符串中对特殊符号解释执行
- 使用\转义特殊符号避免被解释执行
脚本里包含一句单引号输出和一句双引号输出,从这里就可以看到,双引号包含的特殊符号,$变量名代表引用这个变量,比如这里的$PRICE_PER_APPLE就是引用上面已经定义的变量,所以输出的时候直接输出该变量的值
可以看到,用双引号包围的字符串中是有对特殊符号解释执行的,而$HK并没有被解释执行是因为脚本里面的 $ 符号被加上了反斜杠 \ 避免特殊符号被解释执行;
而单引号就所有特殊符号都不做解释执行,所以会发现字符串输出的是原样;
- 使用${}包围变量名避免变量名被解释执行的二义性
比如这里变量名为MyFirstLetters,引用的时候是${MyFirstLetters},如果不加上{}就会变成$MyFirstLettersDEFGHIJ,而我们根本就没有定义这个变量
- 使用双引号""包围变量名可以保留所有空格字符
脚本定义了值带空格的变量greeting,第一行变量在双引号外面;第二行变量在双引号里面
可以看到,第一行输出的空格被压缩成了一个,而第二行则是原样输出
- 其他程序的输出结果直接赋值给shell变量(为什么突然变那么难了我也不知道,跟着一步一步学的)
FILELIST=`ls`这行脚本的意思是把ls命令的结果赋给给FILELIST变量,有两个注意点:
(1)注意包裹ls的符号不是单引号,是反单引号
(2)ls是linux的命令,不是普通的字符串,展示当前目录下所有文件
/bin/date +%Y-%m-%d这个脚本可以直接在linux命令行运行,简单来说它应该是linux的命令才对,输出当前的时间
在shell脚本里面 $()表示开启一个子进程开启一个子shell来执行其中的命令,执行的输出结果会返回调用处
FileWithTimeStamp=/tmp/file_$(/bin/date +%Y-%m-%d).txt这行脚本是进行字符串拼接,shell脚本不像其他编程语言拼接字符串需要用+号等符号
顺便提一下快捷键,* 号(选中然后shift+8)可以高亮选中的所有相同字符串