精华内容
下载资源
问答
  • 简单shell程序

    2013-12-08 18:53:40
    简单shell程序,实现copy,type,创建子进程,执行外部命令的功能
  • 一个简单shell程序

    千次阅读 2016-10-11 21:31:57
    创建一个shell脚本 vim hello_shell.sh 进入vim编辑器,按i进入插入模式 #!bin/zsh for ((i=0; i; i++)); do echo “hello_shell” done exit 0 按Esc退出插入模式,输入:wq退出,再为文件添加可执行...
    1. 创建一个shell脚本

      vim hello_shell.sh
      这里写图片描述

    2. 进入vim编辑器,按i进入插入模式

      #!bin/zsh
      for ((i=0; i<10; i++)); do
      echo “hello_shell”
      done
      exit 0
      这里写图片描述

    3. 按Esc退出插入模式,输入:wq退出,再为文件添加可执行权限

      chmod 755 hello_shell.sh
      这里写图片描述
      这时候就可以运行了
      ./hello_shell.sh
      这里写图片描述

    4. 创建一个c程序

      vim hello_word.c

    5. 编辑c程序

     #include <stdio.h>
       int main(void)
      {
        printf("hello world!!");
        return 0;
       }
    1. 为上述文件创建目录mybin,并移入其中

      mkdir mybin
      mv hello_shell.sh hello_world.c mybin/

    2. 使用gcc生成可执行文件

      gcc -o hello_world hello_world.c

    3. 运行两个程序
      转到mybin目录

      cd mybin
      ./hello_shell.sh
      ./hello_world 注意不是hello_world.c

    4. 可以加path使其在任意目录下都可运行

      echo “PATH=$PATH:/home/shiyanlou/mybin” >> .zshrc”
      source .zshrc<==>. ./.zshrc
      echo是将新的路径追加到.zshrc
      source 是使其生效
      source 的别名.
      加过路径后运行就不需要目录了,直接
      hello_shell.sh
      hello_word

    展开全文
  • 这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include #include #include #include #...
    这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下:
    

    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <errno.h>
    #include <sys/stat.h>

    char parsecmd(char *);
    /************关于本文档********************************************
    *filename:用C语言编写一个Linux下的简单shell程序
    *purpose:展示了C语言如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令
    *wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
    Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言编程
    *date time:2006-07-16 15:00:00
    *Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
    * 但请遵循GPL。
    *Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
    *********************************************************************/
    int main(int argc, char ** argv)
    {
      char cmd[1024];
      char tmp[101];
      char b = 'F';
      char * p;

      while(1) {
        memset(cmd, 0, 1024);
        printf("Next command%% ");/*显示提示信息*/
        fgets(cmd, 1000, stdin);/*接受用户输入,命令最长1000个字符*/
        cmd[strlen(cmd) - 1] = 0;/*去掉输入的回车符*/

        b = parsecmd(cmd);/*分析取得用户命令字*/

        if(b=='T') break;/*如果是logout就退出程序*/

        switch(b){
        case 1:/*切换工作目录*/
          if(chdir(cmd + 3) != 0) {
            printf("chdir(%s) error!%s\n", cmd + 3, strerror(errno));
          }
          printf("I'm working in '%s' now\n", getcwd(tmp, 100));
          break;
        case 2:/*ls命令*/
        case 7:/*cp命令*/
        case 8:/*pwd命令*/
          system(cmd);
          break;
        case 3:/*pid命令*/
          printf("%d\n", getpid());
          break;
        case 4:/*rm命令*/
          remove(cmd + 3);
          break;
        case 5:/*mkdir命令*/
          mkdir(cmd + 6, 0755);
          break;
        case 6:/*mv命令*/
          p = strchr(cmd + 3, ' ');
          *p = 0;
          rename(cmd + 3, p + 1);
          break;
        case 0:/*不能识别的命令*/
          printf("Bad command, try again! All aviable commands are:\nlogout cd ls pwd pid rm mkdir mv cp\n", getpid());
          break;
        }
      }
    }

    char parsecmd(char * s)
    {
      if(!strcasecmp(s, "logout")) return 'T';
      else if(!strncasecmp(s, "cd", 2)) return 1;
      else if(!strncasecmp(s, "ls", 2)) return 2;
      else if(!strncasecmp(s, "pwd", 3)) return 8;
      else if(!strncasecmp(s, "pid", 3)) return 3;
      else if(!strncasecmp(s, "rm", 2)) return 4;
      else if(!strncasecmp(s, "mkdir", 5)) return 5;
      else if(!strncasecmp(s, "mv", 2)) return 6;
      else if(!strncasecmp(s, "cp", 2)) return 7;
      else return 0;
    }

    命令运行结下:

    Next command% ls /
    bin   cdrom  dev  home    initrd.img  lost+found  mnt  proc  sbin  sys  usr  vmlinuz
    boot  data   etc  initrd  lib         media       opt  root  srv   tmp  var
    Next command% pwd
    /data/example/c
    Next command% cd /
    I'm working in '/' now
    Next command% pwd
    /
    Next command% cd /tmp
    I'm working in '/tmp' now
    Next command% pwd
    /tmp
    Next command% ls
    gconfd-administrator  ksocket-administrator  plugtmp                                   ssh-MmlTLh5149
    gconfd-root           mapping-administrator  scim-helper-manager-socket-administrator  virtual-administrator.XSmKSv
    kde-administrator     orbit-administrator    scim-panel-socket:1-administrator
    keyring-g5rmCS        orbit-root             scim-socket-frontend-administrator
    Next command% mkdir xxxx
    Next command% ls
    gconfd-administrator  ksocket-administrator  plugtmp                                   ssh-MmlTLh5149
    gconfd-root           mapping-administrator  scim-helper-manager-socket-administrator  virtual-administrator.XSmKSv
    kde-administrator     orbit-administrator    scim-panel-socket:1-administrator         xxxx
    keyring-g5rmCS        orbit-root             scim-socket-frontend-administrator
    Next command% rm xxxx
    Next command% ls
    gconfd-administrator  ksocket-administrator  plugtmp                                   ssh-MmlTLh5149
    gconfd-root           mapping-administrator  scim-helper-manager-socket-administrator  virtual-administrator.XSmKSv
    kde-administrator     orbit-administrator    scim-panel-socket:1-administrator
    keyring-g5rmCS        orbit-root             scim-socket-frontend-administrator
    ?

    Next command% logout

    展开全文
  • 注意前提条件:全部代码都必须在Linux 中运行!!! 一、进程的创建:编写一段程序,使用系统调用 fork()创建两个子...步骤 1:使用 vi 或 gedit 新建一个 fork_demo.c 程序,然后拷贝清单 2-1 中的程序,使用 ...

    注意前提条件:全部代码都必须在Linux 中运行!!!

    一、进程的创建:编写一段程序,使用系统调用 fork()创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”; 两子进程分别显示字符“b”和字符“c”。

    步骤 1:使用 vi 或 gedit 新建一个 fork_demo.c 程序,然后拷贝清单 2-1 中的程序,使用 cc 或者gcc 编译成可执行文件 fork_demo。例如,可以使用 gcc –o fork_demo fork_demo.c 完成编译。

    步骤 2:在命令行输入./fork_demo 运行该程序。

    代码:

    #include <sys/types.h>
    #include <stdio.h>
    #include <unistd.h>
    int main ()
    {
    int x;
    while((x=fork()) == -1);
    if (x==0){
    x=fork();
    if(x>0)
    printf("b");
    else
    printf("c");
    }
    else
    printf("a");
    }
    

    运行结果如下图:

    在这里插入图片描述

    二、实现一个简单的 shell(命令行解释器):要设计的 shell 类似于 sh,bash,csh 等,必须支持以下内部命令:

    1、cd <目录>更改当前的工作目录到另一个<目录>。如果<目录>未指定,输出当前工作目录。如
    果<目录>不存在,应当有适当的错误信息提示。这个命令应该也能改变 PWD 的环境变量。

    2、environ 列出所有环境变量字符串的设置(类似于 Unix 系统下的 env 命令)。

    3、echo <内容 > 显示 echo 后的内容且换行

    4、help 简短概要的输出你的 shell 的使用方法和基本功能。

    5、jobs 输出 shell 当前的一系列子进程,必须提供子进程的命名和 PID 号。

    6、quit,exit,bye 退出 shell。

    代码:

    #include<stdio.h>
    #include<string.h>
    #include<sys/types.h>
    #include<unistd.h>
    int main()
    {
        char cmd[666];
        char cata[100];
        while(1)
        {
            int len,i,flag,cnt;
            printf("Enter commands:");
    // print String
            scanf("%s",cmd);
    // Calculation String
            len = strlen(cmd);
    
    // for cd
            if(cmd[0]=='c')
            {
                flag=0;
                cnt=0;
    // Start after command
                for(i=3; i<len-1; i++)
                {
    // String is not null
                    if(cmd[i]!=' ') flag=1;
                    if(flag)
                    {
                        cata[cnt++] = cmd[i];
                    }
                }
    // String is null
                if(cnt==0)
                {
                    printf("path error!\n");
                    cata[0]='.';
                    cata[1]='\0';
                }
            }
    
    //for echo
            if(cmd[0]=='e'&&cmd[1]=='c')
            {
    
                flag = 0;
                for(i=5; i<len-1; i++)
                {
                    if(cmd[i]!=' ') flag=1;
                    if(flag)
                    {
                        putchar(cmd[i]);
                    }
                }
                if(flag) putchar('\n');
            }
    
    // for help
            if(cmd[0]=='h')
            {
                printf("/**********Method***********/\n");
                printf("print cd<catalog> :find directory\n");
                printf("print environ :List set\n");
                printf("print echo<content> : print content\n");
                printf("print help :List Method\n");
                printf("print jobs :provide PID\n");
                printf("print quit,exit,bye :break \n");
                printf("/******Method***************/\n");
            }
    
    // for quit,exit,bye
            if(cmd[0]=='q'||cmd[1]=='x'||cmd[0]=='b')
            {
                printf("break\n");
                return 0;
            }
            else
            {
    
                cnt=0;
    
    
    
    // child process
                pid_t pid = fork();
                if(pid<0)
                {
    // error occurred
                    fprintf(stderr,"Fork Failed" );
                    return 1;
                }
                else if(pid==0)
                {
    //cd
                    if(cmd[0]=='c')
                    {
                        execlp("/bin/ls",cata,NULL);
                    }
    //jobs
                    else if(cmd[0]=='j')
                    {
                        execlp("pstree","-p",NULL);
                    }
    //environ
                    else if(cmd[1]=='n')
                    {
                        execlp("env","",NULL);
                    }
                }
                else
                {
    //wait child process exit
                    wait();
                }
            }
            printf("\n");
        }
        return 0;
    }
    
    

    运行结果如下图:

    在这里插入图片描述

    各位大佬如有更好的建议或者有地方让各位产生了疑问,各位可以在评论中提出!

    展开全文
  • 在linux编写shell程序并执行

    万次阅读 多人点赞 2017-03-09 23:21:50
    在linux编写shell程序并执行的步骤 简介 我是第一次写博客,不知道应该有什么格式和注意事项,请大家多多指教。 今天是要讲讲怎样在linux命令行环境下创建一个脚本程序运行的。 这对于稍有经验的人来说都不是事...

    在linux编写shell程序并执行的步骤

    简介

    我是第一次写博客,不知道应该有什么格式和注意事项,请大家多多指教。

    今天是要讲讲怎样在linux命令行环境下创建一个脚本程序并运行的。

    这对于稍有经验的人来说都不是事,但对于初次接触linux的新手来说可能会遇到一点麻烦,所以我今天详细讲讲。

    进入vim编辑器,写代码

    vi编辑器是所有linux/UNIX操作系统中的标准编辑器,也是目前linux系统最基本的文本编辑器,主要工作在字符模式下,
    由于不需要图形界面支持,因此它的效率很高。
    怎么进入vim呢?在命令行中输入 vim 文件名

    例如,我要创建一个helloworld文件就输入

    vim helloworld


    回车后就进入了编辑模式。下图就是编辑模式



    但是现在还不能直接输入,要按一下键盘上的i,注意到左下角的文件名变成了INSERT,这就可以开始,敲代码了,如图



    保存文件,推出编辑

    怎样保存文件退出呢?先按下esc,再按冒号,最后输入wq,回车,如图



    执行

    执行的时候用命令 bash 文件名,在本例中就是
    bash helloworld
    执行结果如图


    如果你想用

    ./helloworld

    这种方式执行,需要先赋予用户可执行权限,如下

    chmod u+x helloworld

    chmod 命令可以修改目录和文件的访问权限,u代表文件的所有者,+代表添加后面的权限,x代表可执行权限 ,如图


    到这里,整个过程就讲解完了。

    第一次写博客,花了一个多小时,以后会写出更好的文章,请大家多多支持!




    展开全文
  • 功能: 1、显示当前所在目录的路径名(指令pwd) 2、列出指定目录名中的...7、重命名一个文件或目录(指令rename) 8、复制一个已存在的文件(指令copy) 9、在指定的目录及其子目录中查找指定的文件,输出查找到...
  • 自己动手写一个简单的Windows shell扩展程序

    万次阅读 热门讨论 2012-05-19 20:03:12
    作者:朱金灿来源:http://blog.csdn.net/clever101 关于什么叫Windowsshell扩展程序,这里不作介绍,不懂的同学请google之。 Shell程序编写 这里采用的开发环境为Windows
  • 首先说明,我现在要解决的两问题:  1、如果要调用的Shell脚本是常驻内存,也就是说里面有循环不会... 2、用Java调用后,把Java程序杀掉,这时由Java执行Shell脚本要保证正常运行,不能随Java程序的关闭而停止。
  • mac 创建shell文件并执行

    千次阅读 2018-10-12 16:35:51
    1 桌面上建立一个ShellLearn的文件夹 2 我使用的是系统自带的文本编辑器,新建一个文稿,输入echo hellow world 3 保存该文本文件,注意,此时系统不让修改文件的格式为sh,所以保存的是默认的rtf格式的 4 手动修改3步...
  • 在这里我们首先理解Shell怎么执行程序,学习相关知识(什么是进程、如何创建进程、如何运行程序),然后实现这个功能,这样一个简单Shell就诞生了(我把这个Shell叫A Shell,简称ash)。什么是进程 
  • 编写一个简单shell

    千次阅读 2017-02-28 17:24:01
    编写一个简单shell:今天只是写个框架,后面会完善shell ,注:暂且不支持内建命令,不支持重定向,不支持管道  先介绍一下shell:Linux系统提供给用户的最重要的系统程序Shell命令语言解释程序。它不属于内核...
  • 在Linux下简单编写、编译并执行一个C语言程序

    万次阅读 多人点赞 2013-12-02 23:58:47
    C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入。 = 前提基础 = Linux系统的路径写法有两种,一种是相对路径一种是绝对路径。 绝对...
  • 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command和后来的cmd.exe。它...
  • 【Linux】实现一个简单shell

    万次阅读 多人点赞 2017-02-20 21:57:23
    也就是这样一种情形下,我们fork一个进程,如果fork成功,子进程会和父进程执行相同的代码,而我们创建子进程是希望子进程执行指定的操作,所以需要执行exec族函数。 何为程序替换函数? 程序
  • 实现一个简单shell(支持重定向)

    千次阅读 2017-05-10 22:55:37
    5.16更新:支持重定向我们知道...shell自己就是一个进程,当我们输入ls之类的命令,它会通过fork,exec函数去创建一个新的子进程去执行相关操作。因此我们也可以利用这个来实现一个简单shell。当然,这个shell足够
  • Linux C 程序执行 shell 命令获取返回结果的方法

    万次阅读 多人点赞 2017-11-29 21:08:43
    Linux shell 脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序中调用自定义脚本。  《Unix 编程艺术》中有一句话“一行 Shell 脚本胜过万行 C”。那么在 Linux 编程中,C 程序如何调用 shel
  • shell程序

    千次阅读 2018-08-27 18:36:55
    一、shell程序简介 在Windows中,命令行界面只是对图形化界面的一个补充,但是作为Linux灵感来源的UNIX系统最初根本没有图形化界面,所有的任务都是通过命令来完成的,许多强大的功能都可以从shell中轻松实现。...
  • 创建你的第一个Shell脚本

    万次阅读 2015-07-06 16:45:20
    a) 用touch命令创建一个文件:touch my_script b) 用vim编辑器打开my_script文件:vi my_script c) 用vim编辑器编辑my_script文件,内容如下: #!/bin/bash 告诉shell使用什么程序解释脚本 #My first script ls ...
  • shell 脚本执行执行的应用程序

    万次阅读 2018-06-10 00:24:34
    懂脚本的人可以略过此片文章: Mac电脑上用脚本启动某个应用程序: 其他系统也是大同小异: 1、创建以 .sh 结尾的文件 ...其中这:/Applications/finalshelldata/ 代表是你要启动应用程序的地址路径...
  • 39. 如何创建一个新的shell脚本

    千次阅读 2019-08-21 16:16:35
    Lesson39 如何创建一个shell脚本 文章目录1.shell脚本的构成2.shell脚本的调试3.shell脚本的执行4.shell脚本的创建 1.shell脚本的构成 名称 说明 vim script.sh 用vim编写脚本 #!/bin...
  • 最近遇到把sas代码翻译成hive代码中发现这样一个问题,在sas代码中总是很多重复代码:从指标表中读取指标代码,如果指标代码在表中则执行程序,不在则不执行。sas中有if和goto语句进行判断,但hive中没有这样的...
  • shell程序执行方式(三种方式)

    万次阅读 2018-03-28 11:41:46
    /bin/bashname='Tim'echo 'finished'这个脚本创建一个name变量,给这个变量赋了一个值。等会我们将执行这个命令,执行完成之后我们试着单独echo这个变量,看看会有什么不同的结果。1.使用./script.sh2.使用bash ...
  • 利用shell脚本定时执行java程序

    千次阅读 2019-02-21 14:12:37
    最近在工作中遇到一个小需求,需要定时执行java程序,由于是在linux下,很自然想到了利用crontab+shell脚本定时执行java程序。当我按照编写好脚本,手动执行了一下脚本,发现没问题,java程序可以正常运行,于是接着...
  • 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行一个程序。 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的...
  • 标准 I/O 库提供了两个函数popen 和 pclose 函数,这两个函数实现的操作是:创建一个管道,调用 fork 创建一个子进程,关闭管道的不使用端,执行一个 shell 以运行命令,然后等待终止。 API /* popen 和 pc
  • 编写一个显示菜单的shell程序,利用函数实现简单的菜单功能,n的值由键盘输入: (1)计算1到n的奇数之和 (2)计算1到n的阶乘 (3)计算1到n的所有素数 (4)退出程序 Please enter function select and number: 1 ...
  • shell并行执行程序

    千次阅读 2018-05-03 15:13:39
    因项目需要,将shell执行的脚本并行,但是使用&执行导致机器卡住,程序发生异常直接退出; 看来是并行度太大导致资源不够用,如何实现控制并行度的并行 过程 循环里套循环 在for循环中再嵌套一个...
  • 综合实例:用C语言实现一个自定义的shell程序

    万次阅读 多人点赞 2017-12-03 21:13:25
    一个shell需要实现若干功能,首先对要实现的功能做一个简要介绍:  (1)输出重定向:就是把执行某命令后的结果输出到某个文件。例如: ls -al > list.txt  (2)输入重定向:这里的,而是从文件中取出数据到...
  • Java程序定时执行shell脚本

    千次阅读 2017-02-16 10:38:21
    次写博客,写的不好还请见谅。 之前在Linux环境中想定期执行某个脚本,第反应就是将这task加入到crontab里(crontab的知识点这里就不具体...我的解决方法是后台跑Java程序,利用Java程序定时执行shell脚本。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 273,728
精华内容 109,491
关键字:

创建并执行一个简单的shell程序