《Unix/Linux编程实践教程》chapter9 可编程的shell、shell变量和环境

chapter9 可编程的shell、shell变量和环境

章节知识总结

Unix shell运行一种称为脚本的程序,一个shell脚本可以运行程序、接受用户输入、使用变量和使用复杂的控制逻辑。

if…then语句依赖于下述惯例:Unix程序返回0以表示成功。shell使用wait来得到程序的退出状态。

Unix允许用户在环境中以变量的形式存放个性化设置。

环境是每个程序都可以存取的一个字符串数组。每个数组中的字符串都以var=value这样的形式出现,数组的地址被存放在一个名为environ的全局变量里。环境就是environ指向的字符串数组,读环境就是读这个字符串数组,改变环境就是改变字符串。

在这里插入图片描述

在讨论exec系统调用时我们知道,对它的调用就像换脑,用目标程序的代码和数据替换调用程序的代码和数据。但是environ指针指向的数组是唯一的例外,当内核执行系统调用exec时,它将数组和字符串复制到新的程序的数据空间。

在这里插入图片描述

通过上图,我们也可以知道,子程序中环境的设置是父进程环境的副本,子进程不能修改父进程的环境。因为在进程调用forkexec时整个环境都被自动的复制了,所以通过环境来传递数据比较方便、快捷。

修改环境的小demo如下:

#include<stdio.h>

extern char** environ;

main()
{
    char* table[3];
    table[0]="TERM=vt100";
    table[1]="HOME=/on/the/range";
    table[2]=0;     //最后一个指针指向NULL

    environ=table;

    execlp("env","env",NULL);
    //输出:
    //      TERM=vt100
    //      HOME=/on/the/range
}
简易版shell实现(版本二)

shell版本二实现参考github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值