• shell编程(一)


    shell 简介

    Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本

    Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系
    统所能理解的指令)

    在这里插入图片描述

    语句

    • 说明性语句:
      以#号开始到该行结束,不被解释执行

    • 功能性语句:
      任意的shell命令、用户程序或其它shell程序。

    • 结构性语句:
      条件测试语句、多路分支语句、循环语句、循环控制语句等。

    第一个shell脚本

    创建一个shell脚本–test.sh

    #! /bin/sh
    echo "hello world"
    
    • 1
    • 2

    echo "hello world"很简单就是输出字符串hello world

    #! /bin/bash -->告诉操作系统用哪种类型的shell来解释执行该程序

    如何执行改脚本,创建test.sh是个普通文件,使用ls -l可以查看,该文件没有可执行权限,使用

    chmod u+x test.sh,给脚本添加上可执行权限。

    ghost-linux@ghost-linux:~/shell$ ./test.sh 
    hello world
    
    • 1
    • 2

    输入和输出

    echo

    echo string

    echo 是shell中用于输出的指令

    ​ 如果需要转义,可以加上-e选项;用-n选项来禁止echo命令输出后换行

    在这里插入图片描述

    read

    read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量

    read varible1 varible2 ...


    • read -a 读入一个数组
      例:
      read -a array #读入一串数字作为数组array的元素

      echo ${#array[@]} #计算这个数组中有多少个元素

      echo ${array[@]} #打印这个数组中所有的元素

      echo ${array[2]} #打印这个数组中下标为2的元素

    • read -p 在输入时打印提示语句
      例:read -p “Enter aa bb:” aa bb

    管道

    cmd1 | cmd2

    ​ 管道就是将一个命令cmd1的输出当做输入传给另一个命令cmd2

    |是管道符号

    ​ 一般情况下,管道后面的操作都是查找grep、切割awk或替换seb

    在这里插入图片描述

    重定向

    • 系统已经定义的文件描述符

      • 标准输入:0
      • 标准输出:1
      • 标准错误:2
    • 重定向命令

      命令作用
      cmd > file将cmd重定向到file
      cmd >> file将cmd重定向追加到file
      m <& n将文件描述符n输入重定向到m
      m >& n将文件描述符m输出重定向到n
      cmd < file将file作为输入给cmd
      cmd << deli从标准输入中读入,直至遇到deli分界符
      cmd > file 2>&1把标准输出和标准错误一起重定向到file中

    在这里插入图片描述

    exec

    • exec执行shell命令

    • 操作文件描述符

      使用exec创建的文件描述符重定向,是永久有效,直到显示取消重定向,可以看下面例子

      #! /bin/bash
      
      echo "input 6<&0 name ouput to stdout"
      exec 6<&0 0<name 
      read var
      read var1
      echo $var
      echo $var1
      
      echo "close fd--6"
      exec 0<&6 6<&-
      echo -n "read from stdin:"
      read num
      echo "num = $num"
      
      echo "test over" >> name
      
      echo this is file name:
      cat name
      
      echo "redirect stdout to exec.log"
      exec  1>exec.log
      wc -l name
      
      echo "redirect stdout to stderr"
      exec 1>&2
      echo "redirect stdout to stderr over"
      wc -l name
      
      echo "ouput exec.log"
      cat exec.log
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32

  • 相关阅读:
    孩子写作业用台灯好还是不用好?双十一写作业的护眼台灯推荐
    【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生
    国内主要的ERP软件有哪几种?谁家的ERP软件好用
    我们被一个 kong 的性能 bug 折腾了一个通宵
    使用 SSH 连接到 GitHub
    Radius OTP完成堡垒机登录认证 安当加密
    【数据结构】队列和栈
    决胜北交大深度学习算法大赛,冠军揭示通关攻略
    卓越领先!安全狗入选2023年福建省互联网综合实力50强
    [Java]快速入门二叉树,手撕相关面试题
  • 原文地址:https://blog.csdn.net/Ghost_199503/article/details/128167803