模拟实现一个简单的shell

在Linux中我们在输入命令的时候,接收命令,执行命令的叫做shell,在Linux中多数默认的shell是bash,bash也是也是一个程序,我们可以使用c语言编写模拟实现一个简单的bash。

命令提示符

我们在进入系统时会有一个等待我们输入命令的界面
image.png
打印的提示符中有用户名、主机名、和当前工作路径。这个我们直接通过环境变量获取然后打印就行了

const char* UseName()//获取用户名
{
                                                                              
    char* name=getenv("USER");
    if(name) return name;
    else return "none";
}

const char* HostName()//获取主机名
{
   
    char* name=getenv("HOSTNAME");
    if(name) return name;
    else return "none" ; 
}

const char* Cwd()//获取当前路径
{
   
    char* name=getenv("PWD");
    if(name) return name;
    else return "none";
}
int GetUseCommand()//打印提示符,获取用户输入命令
{
   
     printf("[%s@%s %s]$",UseName(),HostName(),Cwd());
}

实现最基本的打印命令行提示符之后,我们获取用户输入的命令,我们在平时输入的时候,读取到的是一个字符串
“ls -a -l“
我们需要把一个连续的字符串分割成独立的命令好进行程序替换
我们需要把"ls -a -l",分割成"ls" “-a” “-l”。
我们在获取用户输入时要注意不能使用scanf获取命令,因为我们输入的命令时带有空格符的,scanf会将空格符当成分隔符来结束读取,所以我们使用fgets

void CommandSplit(char*command,char*argv[])//分隔命令
{
   
    int n=0;    
    argv[n++]=strtok(command,SEP);
    while(argv[n++]=strtok(NULL,SEP));
}

int main()
{
   	
    char command[1024];//存储用户输入的命令
    GetUseCommand(command,sizeof(command));

    char* argv[100];//存储分隔之后的命令<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值