前言:
命令行和shell这两个概念常常使人困惑,今天我们就来讲讲命令行和shell是什么?
目录
如何解释:export PATH=/opt/buildroot-2017.08/output/host/usr/bin:$PATH
命令行是什么?
提供用户输入命令的界面,其本身只接受输入,然后把命令传递给命令解释器。后者就是shell
在bash中,命令行以一个美元符号$作为提示符,表示用户可以输入命令。
如果正在以root身份执行命令,那么提示符将会成#,如下所示
注:在bash的美元提示符之前,一般还会有一段信息,包括用户名、主机名和当前目录才完整。
shell是什么?
本质上是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口。
Linux下常见的shell环境有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
不同的shell提供不尽相同的语法和特性,用户可以使用任何一种shell。本篇文章的所有命令都在bash(Bourne Again Shell(/bin/bash))下测试通过。
shell脚本(shell script)
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。shell 和 shell script 是两个不同的概念。
1、新建一个shell脚本:
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 后缀.sh,扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
输入一些代码,第一行一般是这样:
#!/bin/bash
echo "Hello World !"
注1:shell程序的第一行总是以#!开头,指定脚本的运行环境,/bin/bash即指定bash环境。
注2:echo命令把参数传递给标准输出。
注3:shell脚本会忽略空行。用空行分割一个程序中不同的任务代码是一个良好的编程习惯。
注4:以#号开头的行是注释。
2、运行脚本的两种方式:
1、作为可执行程序
chmod +x test.sh #使脚本具有执行权限
./test.sh #执行脚本
注:一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
/bin/sh test.sh
/bin/php test.php #如果是php的话
注:这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
补充:在Linux里的PATH是什么?
如何解释:export PATH=/opt/buildroot-2017.08/output/host/usr/bin:$PATH
PATH是系统环境变量——搜索路径,定义了运行命令的查找路径(即告诉shell可以在什么地方找到用户要求执行的程序),我们可以通过export来查看系统环境变量有哪些
有时候我们会在一些配置文件里看到类似的内容,小小的解释一下
export PATH=/opt/buildroot-2017.08/output/host/usr/bin:$PATH
#$PATH这个可以放在前面,也可以放在后面,下面这样也行
export PATH=$PATH:/opt/buildroot-2017.08/output/host/usr/bin
这句命令的意思就是,修改PATH的值。
其中export可以直接修改PATH的值,执行该脚本文件生效,需要注意的点是直接运行脚本文件只在该终端生效,要想这个修改运用到其他终端,执行脚本文件的时候需要加上source,比如说 source ./test.sh
现在我们来理解下这句话:PATH=/opt/buildroot-2017.08/output/host/usr/bin:$PATH
其中PATH=不用解释吧,就是重新给PATH赋值;
“:”冒号在这里的作用只起分隔符的作用
“$PATH”指当前的系统环境变量值,根据PATH的定义,可以理解成当前运行命令查找的路径有当前这些
然后PATH=/opt/buildroot-2017.08/output/host/usr/bin:$PATH的意思就是重新定义PATH的值,也就是当运行命令时,可以从路径/opt/buildroot-2017.08/output/host/usr/bin加上原来PATH里的路径里面去找这个运行命令的可执行文件;
一旦找到就正常执行,找不到就提示找不到该命令
注:提交一个命令时,如果用户没有提供完整路径,那么shell依次在PATH变量指定的目录去寻找,一旦找到这个程序就会执行,如果没找到则报错找不到该命令;
如果在 PATH 包含的目录中,有多个目录都包含某命令的可执行文件,那么会执行先搜索到的可执行文件