一、什么是shell
Ubuntu也是bash
二、Linux的启动过程
三、shell脚本的格式
命令是如何执行的:
cd /var ; ls #用分号隔开
若命令过多,可以把它们写到一个bash文件中然后赋予权限:
vim 1.sh
cd /var/
ls
pwd #没有分号,用回车隔开
赋予权限的操作是:
chmod u+x 1.sh
运行命令是:
bash 1.sh
若将此文件发送给别人,但人家的系统默认不是shell,就在1.sh文件中第一行加入:
#!/bin/bash #就是sha-bang
这一行是,如果用bash 1.sh命令的话,就会认为这一行是注释;但如果用 ./1.sh的话,就不认为这一行是注释,而是调用/bin下的shell。
第二行可以加一行注释:
#demo
四、脚步不同执行方式的影响
在上面的四种执行命令中,前两个都会产生子进程,他俩的区别是:第一个是直接执行,第二个是用sha-bang。
后两个是在当前的进程中运行的,注意第四个是有一个空格。详细解释如下:
第一个:在子进程中执行,执行完之后不会影响父进程,而且可以不用赋予可执行权限。
第二个:不赋予权限的话,会显示:
bash: ./2.sh:权限不够
所以以后碰到权限不够的问题,不要以为是sodu的问题,有可能是这个问题,所以需要:
chmod u+x 2.sh
效果同第一种。
第三个:会影响当前的进程,结束后父进程的环境也变了。
第四个:同第三个。
五、管道
cat:主要用来把文本的输入显示到终端上
分号主要是用来隔开命令,第一条命令执行完再执行第二条,两个命令之间没啥关系;而管道符是将第一条命令的输出给第二条命令的输入,同时为两个命令建立两个子进程,因为是在子进程中运行的,所以如果有内建命令,是不会传递给父进程的,所以此时要规避使用内建命令。
六、重定向
在输出重定向中,前两个都把原来输出到终端的输出到文件。第一个是会清空源文件,所以注意不要指向系统文件;第二个是在源文件后面追加。第三个是把错误信息输出到文件中;第四个是无论有没有错误,都输出到指定文件中。
七、变量赋值
赋值时不区分变量,比如int和char等,是一样的;等号的左侧和右侧不允许出现空格。
八、变量的引用
默认作用范围是在子进程中,父进程是得不到的;要想得到,就得用export导出才行。
九、环境变量
echo $0:若上一条命令正确,返回0;若错误,返回1。
echo $$:显示当前进程的PID。
echo $0:显示当前进程名称。
echo 显示啥后面都得加$。
十、环境变量配置文件
第一个主要是系统启动和终端启动的配置文件
启动顺序如下: