目录
linux bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令;Bash还能从文件中读取命令,这样的文件称为脚本;和其他Unix shell一样,它支持文件名替换、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。
bash的命令语法是Bourne shell命令语法的超集。
bash实质上是一个可执行程序,一个用户的工作环境。
bash的功能一是可以记入历史命令,第二呢,可以用tab键自动补全。第三。alias命令别名,第四呢,工作控制,可以将某些任务放到后台去运行。再一个是程序脚本就是可以执行shell脚本文件。还有通配符以及内建命令type。
利用bash创建ps命令
利用bash创建ps命令----execl的使用(结合fork)
fork+exec()是Linux上创建新进程方式;
//(1)main.c
- #include
- #include
- #include
- #include
- #include
-
- int main()
- {
- printf("main pid=%d,ppid=%d\n",getpid(),getppid());
-
- pid_t pid=fork();
- assert(pid!=-1);
-
- if(pid==0)
- {
- printf("chilr pid=%d,ppid=%d\n",getpid(),getppid());
- execl("/usr/bin/ps","ps","-f",NULL);
- printf("excel error");
- exit(0);
- }
-
- wait(NULL);
-
- exit(0);
-
- }
当前主程序复制产生一个子进程,子进程用新程序(b)替换自身;
//(2)main2.c
- #include
- #include
- #include
- #include
- #include
- #include
-
- int main(int argc,char *argv[],char *envp[])
- {
- printf("main pid=%d\n",getpid());
-
- pid_t pid=fork();
- assert(pid!=-1);
-
- if(pid==0)
- {
- char *myargv[]={"b","hello","abc","123",(char *)0};
- execve("./b",myargv,envp);
- perror("execl error");
- exit(0);
- }
- wait(NULL);
- printf("main over\n");
- exit(0);
-
- }
(3)
//b.c
- #include
- #include
- #include
- #include
-
- int main(int argc,char *argv[],char *envp[])
- {
- printf("b pid=%d\n",getpid());
-
- int i=0;
- printf("argc=%d\n",argc);
-
- for(;i
- {
- printf("argv[%d]=%s\n",i,argv[i]);
- }
-
- for(i=0;envp[i]!=NULL;i++)
- {
- printf("envp[%d]=%s\n",i,envp[i]);
- }
-
- exit(0);
- }
./main2