网站首页 > 文章中心 > 其它

linux中的命令解释器

作者:小编 更新时间:2023-09-28 18:24:56 浏览量:94人看过

bash(shell)命令解释器,Linux界面介绍

Linux bash命令行:bash命令行解释器或者翻译官,命令行输入命令都是由bash解释执行的.

第一段:命令行

第二段:查询当前登录的用户:

root

第三段:查询当前用户主机名:

oldboy

第四段:查询当前用户所在的路径:

/root

第五段:切换用户:

#切换到oldboy用户

(#$是普通用户的提示符.一般大臣,布衣.)?

第六段:符号的意思

~? ? ? ? 用户家目录

-? ? ? ? ? 上一次所在的目录

.? ? ? ? ?表示当前目录

..? ? ? ? ?上一级目录

../.. ? ? ?表示上一级的上一级目录

Linux中的sh命令的详细解释

linxu下的sh命令相当于是shell命令语言的解释器.下面由我为大家整理了linux的sh命令的详细解释的相关知识,希望对大家有帮助!

第一段:Linux中的sh命令的详细解释

sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取.通过用户输入命令,和内核进行沟通!Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell.Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点.

语法

bash [options] [file]

选项

-c string:命令从-c后的字符串读取.

-i:实现脚本交互.

-n:进行shell脚本的语法检查.

-x:实现shell脚本逐条语句的跟踪.

第二段:Linux中的sh命令的具体例子

使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:

◆ cat /var/log/secure

◆◆ cat /root/satools/black.txt

◆ for i in '◆cat /root/satools/black.txt◆'

◆ '[' 1 -gt 0 ']'

◆◆ awk -F= '{print $1}'

第三段:Linux中对.sh文件的操作命令

①.、创建test.sh文件

touch test.sh

vi test.sh

敲击esc, 然后输入 :wq ,回车退出

chmod ◆x test.sh

(1)./test.sh

rm test.sh

linux常用的shell有哪些

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言、命令解释程序及程序设计语言.

shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相应的反应.

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中的其他应用程序所调用.用户在提示符下输入的命令都由shell先解释然后传给Linux核心.

Linux常用的shell有哪些?

①.、Bourne shell

Bourne shell是一个交换式的命令解释器和命令编程语言.

Bourne shell是标准的UNIX shell,以前常被用来做为管理系统之用.大部分的系统管理命令文件,例如rcstart、stop与shutdown都是Bourne shell的命令档,且在单一使用者模式下以root签入时它常被系统管理者使用.Bourneshell是由AT$T发展的,以简洁、快速著名,Bourne shell提示符号的默认值是$.

C shell是柏克莱大学所开发的,且加入了一些新特性,如命令列历程、别名、内建算术、档名完成和工作控制.对于常在交谈模式下执行shell的使用者而言,他们较喜欢用C

shell;但对于系统管理者而言,则较偏好以Bourne shell来做命令档,因为Bourne shell命令档比C shell命令档来的简单及快速.C shell提示符号的默认值是%.

【Linux】实现一个简单的shell命令解释器

【嵌牛导读】shell命令解释器该包含哪些部分

【嵌牛鼻子】shell命令解释器该包含哪些部分

【嵌牛提问】shell命令解释器该包含哪些部分

我们所做的这个简单的shell命令解释器可以实现简单的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等

根据简单命令的定义,它的第一个参数是要执行的命令,后面的参数作为该命令的参数.

要执行的命令有两种情况:

一种是外部命令: 也就是对应着磁盘上的某个程序,例如 pwd、ls等等.对于这种外部命令,我们首先要到指定的路径下找到它,然后再执行它.

另一种是内部命令:内部命令并不对应磁盘上的程序,例如cd等等,它需要shell自己来决定该如何执行.例如对 cd 命令,shell就应该根据它后面的参数改变当前路径.

对于外部命令,需要创建一个子进程来执行它,本质就是fork◆exec

#include stdio.h

#include stdlib.h

#include assert.h

#include string.h

#include pwd.h

#include sys/utsname.h

#include sys/types.h

#include unistd.h

#define MAX 10

#define PATH "/bin/" //系统bin路径位置

char OLDPWD[STRLEN]={0}; //记录上一次的命令,为了cd -这条命令

//================================================================================

//每次敲回车输出当前所在用户信息

//普通用户和root用户的提示符区别

void Printf_Info()

{

char flag='$';

struct passwd *pw=getpwuid(getuid());

assert(pw!=NULL);

//uid为0则为root用户

if(pw-pw_uid==0)

flag='#';

}

struct utsname hostname; //主机名

uname(hostname);

char node[STRLEN]={0};

strcpy(node,hostname.nodename); //获取网络上的名称

char* name=strtok(node,".");

//获取绝对路径

char path[STRLEN]={0};

getcwd(path,STRLEN-1);

char*p=path◆strlen(path); //p指向绝对路径的末尾

while(*p!='/')

p--;

//p指向路径末尾往前的第一个'/'位置处

if(strlen(path)!=1)

p◆◆; //◆◆前,p-'/'

if(strcmp(path,pw-pw_dir)==0)

p="~";

? fflush(stdout);

void Mycd(char*path)

//第一个字符串为cd而第二为空 如:cd 则结束本轮循环

if(path==NULL)

exit(0);

//cd ~ 回到用户根目录

if(strcmp(path,"~")==0)

? {

? ? ? struct passwd*pw=getpwuid(getuid());

? ? ? path=pw-pw_dir;

? }

? //cd - 回到上一次的位置

? if(strcmp(path,"-")==0)?

? ? //若是第一次输入命令,则cd -命令不存在!

? ? ? if(strlen(OLDPWD)==0)

? ? ? {

? ? ? ? ? return ;

? ? ? }

? ? ? //否则把上一次的命令给path

? ? ? path=OLDPWD;

? //getpwd记录当前工作目录的绝对路径

? char oldpwd[STRLEN]={0};

? getcwd(oldpwd,STRLEN-1);

if(-1==chdir(path))//反之则不是空,则通过chdir系统调用进入到该目录中

? ? ? strcat(err,path);

? ? ? perror(err);

? //每次执行完cd命令后,把工作路径赋给OLDPWD

? strcpy(OLDPWD,oldpwd);

//命令分割函数

void Strtok_cmd(char*buff,char*myargv[])

char *s=strtok(buff," "); //分割输入的字符串

if(s==NULL) //如果s为空,则进入下一轮循环

myargv[0]=s; //把分割出来的第一个字符串放在myargv[0]中

int i=1;

while((s=strtok(NULL,""))!=NULL) //把后续分割出来的字符串依次存放在数组中

myargv[i◆◆]=s;

//===============================================================

int main()

while(1)

Printf_Info();

//从终端获取命令存入buff中

buff[strlen(buff)-1]=0;

char *myargv[MAX]={0};

//分割输入的命令

Strtok_cmd(buff,myargv);

//如果输入exit则退出循环

if(strcmp(myargv[0],"exit")==0)

//如果分割出来的第一个字符串为cd

else if(strcmp(myargv[0],"cd")==0)

Mycd(myargv[1]);

continue;

//若是系统调用,直接替换fork◆exec

pid_t pid=fork();

assert(pid!=-1);

if(pid==0)

//先把路径放入path中

strcpy(path,PATH);

//进行命令拼接,路径◆名称

strcat(path,myargv[0]);

//替换进程 例如:/bin/ls

execv(path,myargv);

//处理僵死进程

else

wait(NULL);

运行结果如下 :

异常处理如下:

若是第一次运行程序,则不能使用cd - 命令,因为此时还没有历史路径

若进入一个不存在的目录则会报错,没有这个文件或目录

若直接输入一个不存在的无法识别的命令,也会报错.

Linux命令解释器——Shell?

Shell是应用于Linux系统中的命令解释器,其作用和Windows系统的命令提示符一样.都是为当前用户提供与系统内核进行交互操作的一种用户界面.

以上就是土嘎嘎小编为大家整理的linux中的命令解释器相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章