Shell命令分类
Shell命令分为两种:
1)自带的命令称为内置命令。内部命令本质是一个自带的函数,当shell启动后,所有的内部命令会被加载进入内存,所以内部命令最快。
2)外部命令。外部命令本质也是一个函数,运行外部命令要开启一个新的进程,所以效率上比内置命令差很多。
用户输入一个命令后,Shell 先在内部命令中查找,如果有就执行;如果没有就在外部命令中查找,如果有就执行;都没有的话就报错,告诉用户该命令不存在。
常见的内部命令:echo、kill、cd、ls等
外部命令根据一个叫做 PATH 的环境变量去查找。该环境变量保存了 Shell 对外部命令的查找路径,如果在这些路径下找不到同名的命令,Shell 也不会再去其它路径下查找了,直接报错了。
使用echo命令可以查看当前PATH保存了哪些命令(MAC OS系统)

注:
1)不同路径以冒号(:)分隔,shell只会在上面这几个路径下查找外部命令
2)echo 命令用来输出一个字符串
定制化自己的shell命令
其实也可以自己编写程序,编译完成后放在以上任意一个路径下,就实现了自己定制化的shell程序
如实现自动求和的shell命令:getSum
#include <stdio.h>
#include <unistd.h>
#include <getopt.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int start = 0;
int end = 0;
int sum = 0;
int opt;
char *optstring = ":s:e:";
while((opt = getopt(argc, argv, optstring))!= -1){
switch(opt){
case 's': start = atoi(optarg); break;
case 'e': end = atoi(optarg); break;
case ':': puts("Missing parameter"); exit(1);
}
}
if(start<0 || end<=start){
puts("Parameter error"); exit(2);
}
for(int i=start; i<=end; i++){
sum+=i;
}
printf("%d\n", sum);
return 0;
}
将这段代码编译成名为 getSum 的应用程序,并放在/usr/local/bin目录下,然后在 Shell 中输入下面的命令,就可以计算 1+2+3 ...... +99+100 的值。

注:
1) -s 代表 开始 的标志,-e代表 结束 的标志
2)有了getopt.h 头文件中的 getopt() 该函数我们就不用自己去解析参数了
shell个性化地配置
对于普通用户来说,不管是否登录shell都会加载~/.bashrc 文件。
我们可以将自己的一些代码添加到 ~/.bashrc,这样每次启动 Shell 都可以个性化地配置。
具体配置方法这里不做介绍了。
网友评论