使用shell语法来编写出来的程序,这个程序叫shell脚本。
shell语法不同于C语言,有独特变量定义与赋值,循环结构,判断语句…
shell的英文翻译是"贝壳"的意思。在贝壳的外部是用户空间,在贝壳内部是内核空间,用户与内核之间进行交互时,就一定要通过shell。
既然shell是可以解析用户输入的命令,究竟是谁来解析?
其实命令行是由于bash进程打印出来,而命令一定要写在命令行后面才会生效,因为写在命令行后面才会被bash解析。
只要终端一启动 , 默认执行/bin/bash这个程序,接着开启了新的bash进程。
分析终端、bash、命令之间的关系
查看整个linux系统所有进程ID号
$ ps -ef 类似于打开windows中任务管理器
谁开启的进程 | 进程ID | 父进程ID | 进程的名字 | 代表 |
---|---|---|---|---|
root | 1 | 0 | /sbin/init splash | linux系统中的祖先进程 |
jj | 3864 | 2602 | /usr/lib/gnome-terminal/gnome-terminal-server | terminal终端 |
jj | 3869 | 3864 | bash | bash进程其实是terminal终端的子进程 |
jj | 4032 | 3869 | ps -ef | shell命令其实是bash进程的子进程 |
命令一定要在写在命令行后面才会生效
$ gedit a.c gedit进程正在运行,终端命令行没有办法返回!
ls
cd 没有命令行解析这些命令。
pwd
shell编程
shell编程其实就是将一些shell命令写入到一个文件中,然后文件依次执行shell命令。
C语言程序与shell脚本区别?
- | C语言程序 | shell脚本 |
---|---|---|
语法: | C语言 | shell语法 |
是否需要编译: | 需要编译器编译 | 不需要编译 |
文件后缀: | ****.c | ****.sh |
文件存放位置: | linux任意目录 | 除了共享目录之外的其他目录 ,一般存放在家目录。 |
C语言程序与shell脚本运行方式对比
C语言:
1)在linux任意目录创建一个.c文件: touch test.c
2)使用编辑器编辑程序: gedit test.c
3)编辑完之后,需要使用编译器进行编译: gcc test.c -o test 由gcc编译器编译出来的程序默认都是有执行权限。
4)执行文件即可。 ./test
shell:
1)在除了共享目录之外的其他目录下创建一个新的文件 touch test.sh
2)使用编辑器编辑脚本: gedit test.sh
3)修改脚本的权限: chmod 777 test.sh
4)执行脚本: ./test.sh
shell脚本的helloworld版本
C语言:
#include <stdio.h>
int main()
{
printf("helloworld!\n");
return 0;
}
shell:
1)没有main函数,由于不能调用linux函数,所以头文件也是没有。但是命令是有返回值!
2)shell脚本中第一行一定是 #!/bin/bash -> 指明解析器的路径
3)echo命令如果需要打印字符串中有转义符号需要解析,那么需要使用-e
shell:
#!/bin/bash
echo "helloworld"