用Shell 语言编制一Shell 程序,从命令行输入一个简单的算术表达式,计算结果
时间: 2023-12-10 20:04:30 浏览: 31
以下是一个简单的 Shell 程序,可以从命令行输入一个算术表达式并计算结果:
```shell
#!/bin/bash
# 从命令行读取算术表达式
read -p "请输入算术表达式: " expr
# 使用 bc 命令计算表达式,并将结果输出到标准输出
echo "计算结果为: $(echo "$expr" | bc)"
```
在命令行中执行该脚本,将提示输入算术表达式,例如:
```shell
$ ./calculate.sh
请输入算术表达式: 2 + 3 * 4
计算结果为: 14
```
该程序使用 `read` 命令从命令行读取用户输入的算术表达式,并使用 `bc` 命令计算表达式的值,最后将结果输出到标准输出。用户可以输入任意支持的算术表达式,包括加、减、乘、除、括号等。
相关问题
编写一个Shell脚本文件Calculator.sh,要求从命令行输入简单的算术表达式(加减乘除), 根据不同的运算符调用不同的函数计算并返回结果,最后打印结果。例如输入命令: Calculator.sh 2 + 4 将调用计算加法的函数后返回结果 6,
以下是一个实现上述要求的 Shell 脚本文件 Calculator.sh 的示例代码:
```bash
#!/bin/bash
# 获取命令行参数
op=$2
num1=$1
num2=$3
# 根据不同的运算符调用不同的函数计算并返回结果
case $op in
"+")
result=$(echo "$num1 + $num2" | bc)
echo "$num1$op$num2=$result"
;;
"-")
result=$(echo "$num1 - $num2" | bc)
echo "$num1$op$num2=$result"
;;
"*")
result=$(echo "$num1 * $num2" | bc)
echo "$num1$op$num2=$result"
;;
"/")
result=$(echo "scale=2; $num1 / $num2" | bc)
echo "$num1$op$num2=$result"
;;
*)
echo "Error: Unsupported operator!"
;;
esac
```
你可以通过在终端运行 `./Calculator.sh 2 + 4` 来测试这个脚本文件。请注意,在该脚本文件中,我们使用了 `bc` 命令来进行数学运算,因为 Bash Shell 本身并不支持浮点数运算。如果你在运行脚本时遇到了 `bc: command not found` 的错误,可以先通过 `sudo apt install bc` 命令来安装 `bc` 命令。
编写一个C程序作为Linux内核的shell命令行解释程序。
好的,下面是一个简单的C程序,作为Linux内核的shell命令行解释程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define MAX_CMD_LEN 100
int main(void) {
char cmd[MAX_CMD_LEN];
int status;
while (1) {
printf(">> ");
fgets(cmd, MAX_CMD_LEN, stdin);
cmd[strlen(cmd) - 1] = '\0'; // 去掉换行符
if (strcmp(cmd, "exit") == 0) {
break;
}
pid_t pid = fork();
if (pid == 0) {
execlp(cmd, cmd, (char *) NULL);
printf("Unknown command: %s\n", cmd);
exit(0);
} else if (pid > 0) {
waitpid(pid, &status, 0);
} else {
printf("Fork failed.\n");
exit(1);
}
}
printf("Goodbye.\n");
exit(0);
}
```
这个程序可以接收用户输入的命令,并将其作为子进程运行。在每次循环中,程序会打印提示符“>> ”,然后等待用户输入命令。如果用户输入的命令是“exit”,则程序会退出。否则,程序会使用`fork()`函数创建一个子进程,并在子进程中使用`execlp()`函数执行用户输入的命令。如果`execlp()`函数返回,则说明命令无法执行,程序会输出错误信息。如果`fork()`函数返回值小于0,则说明创建子进程失败,程序会输出错误信息。如果`fork()`函数返回值大于0,则说明程序正在运行父进程,父进程会等待子进程运行完毕,并获取子进程的状态。
请注意,这只是一个简单的示例程序,实际上要实现一个完整的shell命令行解释程序还需要考虑更多的细节,例如支持管道、重定向等高级功能。