Shell脚本基础篇(一)
什么是Shell脚本
Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。更明白地来说,shell script就像早期dos年代的.bat
,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
什么是shell
shell和shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
构建基本脚本
本例环境:BashShell
使用多个命令
在shell中如果要使用多个命令,可以把命令放在同一行,用分号;
隔开,例如:
1 | date ; who |
当然不限于两个命令,可以多个一起使用,当然只要不超过最大命令行字符数255即可
创建shell脚本文件
创建shell文件需要用到编辑器,此时就要强烈推荐Vim了。
shell脚本文件的第一行,必须指定要使用的shell环境,格式如下(再次声明我的环境是Bash)
1 | !/bin/bash |
一般情况下shell的注释就是以#这个符号开始,但是第一行例外,因为感叹号是告诉shell要用哪个shell来运行脚本,在脚本里就可以写入我们需要执行的命令就好啦
1 | !/bin/bash |
上图所示的头部信息并不是必须的,但是在工作或者学习中,养成一个良好的脚本编写习惯是非常重要的,必要的信息都要标记出来,比如脚本的编写时间、实现功能、编写者、联系方式和版本信息等。
这就是一个shell脚本的所有内容了,当然不换行也是可以的,用分号隔开即可,保存到名为test.sh
文件中(没错,shell脚本的后缀就是.sh
但是在Linux中后缀并不重要,不加后缀也可以)
执行一下:
1 | test.sh |
bash: test.sh: command not found
这是为什么呢,因为bash shell并不能找到你的文件,得把你的脚本文件路径增加到PATH
环境变量里,两种方法:
- 将shell脚本文件目录添加进PATH环境变量中
- 在命令提示符中使用绝对或者相对路径来引用此脚本文件
我比较习惯第二种:
1 | ./test.sh |
bash: ./test.sh: permission denied
怎么又报错呢?因为我们的脚本文件并不具有可执行权限
1 | chmod u+x test.sh |
现在就可以成功看到结果啦:
输出语句
shell的输出语句可以是echo
,它可以加引号也可以不加引号来显示字符串,但是当要输出的字符串中有引号的话,就必须用另一种引号将整个字符串括起来,例如:
1 | echo this is a echo |
现在就可以在脚本中输出想要的信息了
1 | !/bin/bash |
1 | ./test.sh |
如果我们想要把输出信息和命令的输出结果显示在同一行,可以用到echo
的-n
参数:
1 | !/bin/bash |
变量
环境变量
shell有一组环境变量,用来记录特定的系统信息,可以使用set
命令来显示一份当前完整的环境变量列表:
在脚本中,在环境变量名前加上美元符号$来使用这些环境变量,例如:
1 | !/bin/bash |
USER、UID和HOME环境变量用来显示已登录用户的有关信息。
注意:echo命令中的环境变量会在脚本运行时替换为当前的值。
在第一个字符串中可以将$USER系统变量放在双引号中,而shell仍然能识别到变量,再说一个例子:
1 | echo "the cost of item is $15" |
输出结果为:
只要在脚本中出现$符号,shell就会认为我们在引用一个变量,上面的例子就是shell找不到$1
这个变量,所以就显示了5
如果要在字符串中显示美元符号,则要使用转义符,即反斜线\
。
1 | echo "the cost of item is \$15" |
今天就到这里,,,托更嘿嘿