shell脚本及执行方式
Shell脚本,是一种为shell编写的脚本程序。shell编程和Java,Python和PHP编程类似,只要有一个可以编写代码的文本编辑器和一个可以解释并执行代码的解释器就可以了。
来看个简单的shell脚本:
touch一个myshell.sh,其中.sh是shell脚本的后缀
#!/bin/bash
echo "hello shell!"
在这里解释一下第一行,#! 是一个约定的标记,它告诉系统应该用什么解释器来执行这个脚本。后面的/bin/bash就是解释器了。
要执行这个shell脚本有两种方式:
作为可执行程序
我们创建的文件默认是没有可执行权限的,利用chmod加上权限就可以执行了
作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名,以这种方式运行的脚本就不需要在第一行指定解释器信息,写了也没用
来谈谈这两种方式的本质
第一种方式: shell会fork创建一个子进程并调用exec来执行这个脚本程序,而且exec有一种机制,如果要执行的是一个文本文件而且第一行给出了解释器,那么就直接用解释器程序的代码段直接替换当前进程然后开始执行,而这个文本文件被当做命令行参数传给解释器。
第二种方式: 第二种方式也就是将文本文件传给解释器做命令行参数来执行。
需要注意的是:执行某些命令,不一定要创建子进程!这些不需要创建子进程的命令,叫做shell的内置命令,由父bash亲自执行。例如:cd命令就是一个内置命令。
shell变量
shell是弱类型语言,看看下面的例子:
#!/bin/bash
a=1
b=3.14
c="hello"
d='m'
echo $a
echo $b
echo $c
echo $d
来看看运行结果:
可以看到shell变量中可以放整型、浮点型、字符型、字符串等等很多东西,在这里需要强调的一点是:变量名和等号直接不能有空格,如果带了空格会被shell解释为命令和命令行参数。下面是shell变量的命名规则:
- 首个字符必须为字母(a-z,A-Z)
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
shell变量的使用及删除
当使用一个变量或输出的时候需要在变量名前加 $ 符号,但一般变量赋值的时候不需要使用,也可以给变量名加上花括号{ },这样是为了方便解释器识别边界。
如果我们要对变量进行计算时,就需要用双圆括号(( )),双圆括号中的内容是类C的,如下:
#!/bin/bash
a=1
b=2
c=$((a+b))
echo ${a}
echo ${b}
echo ${c}
如果我们需要删除一个变量就需要用到unset命令:
#!/bin/bash
mystr="hello word"
echo $mystr
unset mystr
echo $mystr