Linux 内置了shell程序,几乎所有的用户程序都是依靠shell执行的。前几章节介绍的终端可以理解是Linux 提供的shell
用户界面,虽然没有windows 的用户桌面好看。终端的"ifconfig"就是一个shell 执行的程序。
Shell可以执行编译好的C 语言可执行程序,当然也可以执行各种shell脚本,还有一些其他语言的脚本或者高级语言编译的可执行程序。
bash 脚本默认以.sh文件结尾的,但不绝对是。
开始一门语言的第一个程序肯定是"Hello World!",下面我们来创建个脚本并执行。
我们使用vim(前面有介绍过vim,可以回去看一下)创建了一个脚本helloworld.sh,默认没有执行权限。看下cat
的脚本内容,介绍下代码的含义:
#!/bin/sh #这句代码没什么实际功能,只是说明这个是bash 脚本,#是注释这行代码的意思。
echo #是bash 脚本的打印命令。下章详细介绍。
执行脚本有两种方式:
1)sh xxx.sh 或者bash xxx.sh,但是这种方式不常用
2)./xxx.sh,为什么要加./来指定脚本的目录,而我们之前执行的ifconfig 不需要指定ifconfig 文件所在目录是哪里?因为linux
系统有个默认的PATH环境变量,标识了可执行程序的目录,这些目录里的程序可以直接默认被系统在任何路径下找到并执行,而我们当前目录是不在PATH
下的,所以不能像ifocnfig 一样。看图:
注意到ifconfig 是在/sbin/下,而/sbin 是PATH环境变量的其中一个目录,所以不需要指定在哪个目录下。
我把helloworld.sh 所在的当前目录加到PATH 变量里:
可以看到成功执行了。
说明一下,./ 是相对路径,也可以用绝对路径执行:
绝对路径是从根目录到某个目录的全路径。./ 是相对路径(当前目录),../也是相对路径(表示上一级目录),同样
.././../也是相对路径(上级的上级目录)。关于"PATH 环境变量"和"绝对路径/相对路径"这点一定要记住。
我们说.sh 是脚本的后缀,如果不带.sh 呢?
也是可以执行的。
即使改成.c 也是可以执行的:
所以.sh 只是让我们方便看出这是个bash 脚本,而并没有什么实际意义。
但是,我建议大家还是按照我的helloworld.sh 格式写,方便别人阅读:
非特殊情况,请带上.sh 和 "#!/bin/sh" !