在Linux中我们在输入命令的时候,接收命令,执行命令的叫做shell,在Linux中多数默认的shell是bash,bash也是也是一个程序,我们可以使用c语言编写模拟实现一个简单的bash。
命令提示符
我们在进入系统时会有一个等待我们输入命令的界面
打印的提示符中有用户名、主机名、和当前工作路径。这个我们直接通过环境变量获取然后打印就行了
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];//存储分隔之后的命令<