shell
shell 是操作系统为用户(特别是程序员)提供的命令接口。它实际上是一个解释器,如linux下面的bash。
查看当前的shell程序
zhangpeng@pikathu:~$ echo $SHELL
/bin/bash
进一步查看bash
zhangpeng@pikathu:~$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1113504 Apr 5 2018 /bin/bash
关于ls指令的详细内容的参考。
ls -a:显示所有的文件包括目录文件
ls -l:显示用户权限等详细信息
ls -al:两者的结合版
编写第一个shell脚本
zhangpeng@pikathu:~/Desktop$ mkdir shellTest
zhangpeng@pikathu:~/Desktop$ cd shellTest/
zhangpeng@pikathu:~/Desktop/shellTest$ gedit hello.sh
zhangpeng@pikathu:~/Desktop/shellTest$ chmod +x ./hello.sh
zhangpeng@pikathu:~/Desktop/shellTest$ ./hello.sh
显示:
hello
用下面三种方式也可以得相同的结果,会在会面章节进行介绍。
zhangpeng@pikathu:~/Desktop/shellTest$ bash ./hello.sh
hello
zhangpeng@pikathu:~/Desktop/shellTest$ source ./hello.sh
hello
zhangpeng@pikathu:~/Desktop/shellTest$ . ./hello.sh
hello
执行脚本并显示脚本内容
修改hello.sh内容如下:
#!/bin/bash -v
# hello.sh
echo "hello"
执行结果:
#!/bin/bash -v
# hello.sh
echo "hello"
hello
奇妙之处在于:
#!/bin/bash -v # “#!”后面的指令告诉操作系统我们使用解释器及其参数。
此方法只在下面的指令执行时才起效。
./hello.sh
而执行下面三种方法无效,如下所示:
zhangpeng@pikathu:~/Desktop/shellTest$ bash hello.sh
hello
zhangpeng@pikathu:~/Desktop/shellTest$ source hello.sh
hello
zhangpeng@pikathu:~/Desktop/shellTest$ . hello.sh
hello
这是因为在命令执行./hello.sh 时,操作系统不知道我们用哪一个解释器,于是便会用系统的解释器去运行,读到第一行#! 指令后,便使用bash执行,并把相应的参数传递给bash,而在后来的三种方式执行时,实际上使用相应的三种解释程序(bash,source, . )来执行,他们的语法中将忽略#!指令。