用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务。但使用 API 需要手动编写程序。对于不编程序、且需要与操作系统进行交互的用户,又如何使用操作系统的服务呢?

为了向那些不编程的用户提供服务,操作系统提供了一个壳(shell)来与用户交互。 每个操作系统都会提供某种壳以便与用户进行交互。正如蛋壳(eggshell)之于内部的蛋清(egg white)和蛋黄(egg yolk),操作系统提供的壳(“os shell”)是覆盖在操作系统服务上面的一个用户界面(user interface),一般分为如下两种形式:

  • 既可以是图形方式的(GUI, Graphical User Interface):Windows

    • windows 中,启动壳需要执行 explore.exe,也即 windows 的资源管理器
  • 也可以是文本形式的:UNIX,Linux;
    • 启动一个壳,只需要运行 shell 即可,可以同时启动多个壳;

用户在这个界面上输入命令,操作系统则执行这些命令。当然,用户输入的命令不是直接的操作系统服务,而是所谓的 utilities(工具)。这里 utilities 的功能相当于 C 语言中的库函数。用户无法直接调用系统调用。壳上的用户不能直接使用操作系统提供的服务。

1. 一个壳的具体功能

  • 显示提示符(prompt)
  • 接受用户命令并执行;
  • 启动后台进程;
  • 进行工作控制;
  • 提供薇伪终端服务;

2. 一个简单的壳实现

while (true) {type_prompt();                           // 显示命令提示符;read_command(command, parameters);       // 获取用户输入的命令,及参数if (fork() == 0) {                       // fork 一个子进程;execute(command, parameters, 0);     // 子进程代码,执行用户命令} else {                                 // 父进程代码段waitpid(-1, &status, 0);             // 等待子进程结束;}
}

转载于:https://www.cnblogs.com/mtcnn/p/9422055.html

unix shell(壳)的简单实现相关推荐

  1. 《Linux与unix Shell编程指南》 总结

    <Linux与unix Shell编程指南> 总结 标签: linux网络dstcron服务器 2011-01-10 18:27 3742人阅读 评论(0) 收藏 举报 分类: Linux ...

  2. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  3. 检查在Unix Shell脚本中设置环境变量的简洁方法是什么?

    我有一些Unix shell脚本,在开始做事之前,我需要检查某些环境变量是否已设置,因此我要执行以下操作: if [ -z "$STATE" ]; thenecho "N ...

  4. html怎么shell脚本语言,简单shell脚本例子

    为什么要使用Shell脚本 使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象.缺点是:它们的效率通常不如编译型语言.不过权衡之下,通常使用脚本编程还是值 ...

  5. linux脚本量产,可玩性很高的量产键盘、套件 HEAVY SHELL KIRA 96简单上手

    1.jpg (45.97 KB, 下载次数: 4) 可玩性很高的量产键盘.套件 HEAVY SHELL KIRA 96简单上手 2021-2-2 14:20 上传HEAVY SHELL Kira 96 ...

  6. Unix Shell 介绍

    摘要 shell 是提供到 UNIX 操作系统的接口的一个命令编程语言.它的特征包括控制流原语.参数传递.变量和字符串替换.还可获得如 while.if then else. case 和 for 这 ...

  7. 【编程实践】Linux / UNIX Shell编程极简教程

    不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...

  8. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  9. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  10. unix修改ip和计算机名,UNIX shell获取IP和修改IP

    UNIX shell获取IP和修改IP #!/bin/ksh #全局变量 #已配置信息的网卡个数 ETHNUM=0 #网卡名称信息,多个网卡用#符号分隔 ETHS="" #网卡IP ...

最新文章

  1. mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis
  2. ABAP的子程序参数注意点
  3. eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules...
  4. 对话MathWorks:解读MATLAB技术生态圈与未来趋势
  5. 游走于天才与疯子边缘的创业“鬼才”
  6. DARPA 想用自动化技术制造出最强的黑客
  7. Windows 安装Bazel (安装过程中报远程服务器错,先记下来方法)
  8. apache的rewrite详解
  9. 深入学习java虚拟机第二版学习笔记
  10. 数学模型——人口增长模型(基于python)
  11. EXCEL 导入MSSqlserver数据库报错
  12. Caused by: java.io.IOException: ZIP entry size is too large
  13. HTML实现三级导航菜单栏
  14. Ubuntu下使用unison实现文件双向同步
  15. 高质量代码的几大标准
  16. 通俗理解 机器学习中的偏差和方差
  17. Python中find_elements以及presence_of_element_located的用法
  18. Rails+Nginx+Passenger安装配置 简洁可靠
  19. 灰狼算法(GWO)优化支持向量机的数据回归预测,GWO-SVM回归预测,多输入单输出模型。
  20. html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例

热门文章

  1. linux下find(文件查找)命令的用法总结
  2. cocos2dx 3.3final UserDefault有个坑?
  3. IT兄弟连 Java语法教程 变量1
  4. flex 布局实现 横穿线效果 自适应文字内容,自适应调整线宽
  5. 夏普深陷亏损 郭台铭何以执著寻求“联姻”?
  6. scrapy-splash抓取动态数据例子十三
  7. iOS网络 把数据存入钥匙串
  8. UIUC同学Jia-Bin Huang收集的计算机视觉代码合集
  9. ORA-04031 错误
  10. [深入理解MySQL系列] - sort_buffer