Linux bash命令行:bash命令行解释器或者翻译官,命令行输入命令都是由bash解释执行的.
第一段:命令行
第二段:查询当前登录的用户:
root
第三段:查询当前用户主机名:
oldboy
第四段:查询当前用户所在的路径:
/root
第五段:切换用户:
#切换到oldboy用户
(#$是普通用户的提示符.一般大臣,布衣.)?
第六段:符号的意思
~? ? ? ? 用户家目录
-? ? ? ? ? 上一次所在的目录
.? ? ? ? ?表示当前目录
..? ? ? ? ?上一级目录
../.. ? ? ?表示上一级的上一级目录
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作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言、命令解释程序及程序设计语言.
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提示符号的默认值是%.
【嵌牛导读】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 - 命令,因为此时还没有历史路径
若进入一个不存在的目录则会报错,没有这个文件或目录
若直接输入一个不存在的无法识别的命令,也会报错.
Shell是应用于Linux系统中的命令解释器,其作用和Windows系统的命令提示符一样.都是为当前用户提供与系统内核进行交互操作的一种用户界面.
以上就是土嘎嘎小编为大家整理的linux中的命令解释器相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!