zoukankan      html  css  js  c++  java
  • Linux shell 程序设计

    shell 程序设计

    主要的学习内容包含基本思路,语法:变量、条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令

    什么是shell

    适用编写执行相对简单任务的小工具。
    linux系统中,标准shell是GNU工具集中bash(GNU Bourne—Again Shell)。查看bash版本号

    /bin/bash --version

    管道和重定向

    • 重定向输出> ls -1 > lsoutput.txt

    把ls命令的输出保存到文件lsoutput.txt中
    其中参数 -1代表文件描述符,0代表程序的标准输入,1代表标准输出,2代表错误输出。> 把标准输出重定向到一个文件,覆盖已经有的文件

    ps >> lsoutput.txt

    其中>>表示把输出内容附加到文件后

    把标准输出和标准错误输出都重定向到一个文件中,用>&来结合两个输出

    kill -1 1234 >killouterr.txt 2>&1

    • 管道

    利用管道操作符|来连接进程。通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动的进行协调

    ps -xo comm | sort | uniq | grep -v sh |more

    这一命令按照字母顺序排序ps命令的输出,接着用uniq去除相同名字的进程,然后用grep -v sh删除sh的命令,最后将结果显示在屏幕上。

    程序设计语言的shell

    • 交互式程序

    即在命令行上直接输入shell脚本。要继续输入时$就变成了>,由shell判断何时输入完毕并执行脚本程序

    • 创建脚本
    1. 用文本编辑器创建一个脚本 first2. 运行脚本的方式有两种
    • /# !后面的参数指的是用来执行本文件的程序。

    • /bin/sh first

    • chmod +x first first(shell的环境变量PATH为要在当前目录下查找要执行的命令)或者./first(建议使用)

    shell的语法

    变量

    特点是

    1. 使用时不需要做出声明,使用时同时创建。
    2. 区分大小写
    3. 通过在变量名前加$来访问。然后通过echo来显示。

    例子 引号以及read的使用 variable

    # !bin/sh

    myvar="Hi there"

    echo $myvar echo "$myvar" echo '$myvar' echo $myvar

    read myvar echo $myvar

    输出为 Hi there Hi there $myvar $myvar

    在变量前面加$能显示变量的内容,使用双引号不影响变量的替换,使用单引号和不进行变量的替换,用read从用户处读入一个字符串。

    环境变量

    $HOME : 当前目录的家目录
    $PATH: 用冒号分隔用来搜索命令的目录列表
    $PS1:
    $0:脚本名字
    $#:传递给脚本的参数个数
    $$:脚本的进程号
    $1,2,3:脚本的参数

    条件

    • test []:shell的布尔判断命令

      if [-f fred.c]

    then
    
    .....
    
    fi
    
    • test 可以使用的条件类型:字符串比较,算术比较和文件有关的测试

    -d file :文件是否为目录
    -e:存在
    -f:普通文件

    控制结构

    • if then elif then fi.

    ``if condition

    then
    
    statements
    
    elif
    
    statements
    
    else
    
    statements
    
    fi
    
    • for .. in .. do done

    • while do done

      #!/bin/sh

      echo "password"

      read password

      while [ "$password" != "secret" ]

      do

      echo "sorry,try again"

      read password

      done

      exit 0

    • 常用写法 while [ ]; do

    • until

    until ..do :循环根据就不需要执行采用util,至少执行一次采用while

    • case
    • 命令列表

    将几条命令连接成一个序列,执行某个语句之前同时满足好几个条件

    1. AND列表
      state1 && state2 && state3
      从左到右顺序执行每条命令,只有前一条返回true,它下一条命令才执行。

    2. state1 || state2 || state3

    函数

    function_name() {

    statements
    }

    命令

    • break:用于跳出当前循环,只跳出一层循环

    • :命令是一个空命令,用来简化逻辑,相当于true的别名。

    while :相当于 while true
    : ${var:=value}

    • .命令
      ../shell_script 用于在当前shell中执行命令
    • eval 命令
      像个额外的$,给出一个变量值的值
    • exec命令
      将当前shell替换为一个不同的程序
    • export 命令
      一旦一个变量被shell导出,它可以被该shell调用的任何脚本使用,也可以被后续依次调用的任何shell使用

    linux

    • expr 命令

    将它的参数当作一个表达式来求值 可以用$()来替换

    • printf 命令

    • set命令
      作用为为shell脚本设置参数变量。

    • shift

    把所有参数变量左移一个位置,使$2变成$1
    下面代码实现依次扫描所有的位置参数

    #!/bin/sh
    while [ "$1" != "" ]; do
    	echo "$1"
    	shift
    done 
    exit 0
    
    • trap命令
      用于指定在接收到信号后要采取的行动。
      用法: trap command signal
      command:接收到信号后要采取的行动。
      signal:要处理的信号名。
    • unset命令
      用于从环境中删除变量或函数。

    正则表达式极其相关的命令

    • find 命令
      find的完整语法格式:
      find [path] [options] [tests] [actions]
      path :可以选择绝对路径也可以选择相对路径。
      使用操作符和圆括号的find命令
      比如在当前目录下找出文件中比test_for 更新并且以test_为后缀的文件

    例1.

    find . ( -name "test_*" -and -newer test_for ) -type f -print 
    

    命令解释:用转义(),因为()在shell里面有特殊含义,用-and来连接两个测试(-or 或 -not )

    例2.

    find . -newer test_for -type f -exec ls -l {} ;
    

    命令解释:-exec 执行一条命令,读取参数直到;为止,{}是-exec的参数,它被当前文件的完整路径取代。

    • gerp命令
      grep(General Regular Expression Parser )
      find 用来在系统中搜索文件,而grep命令在文件中搜索字符串。
      grep [options] PATTERN [FILES]
  • 相关阅读:
    SqlSugar的基本使用
    File文件操作类
    FTP文件操作类
    ASP.NET WebApi使用Swagger做接口文档
    asp.net中WebService 捕获全局异常
    net log4net 通用配置
    jQuery插件开发模式(转)
    js 对Cookie进行增删改操作
    使用JQ实现相同行或列合并
    sql 取得某个时间段内的所有月份和日期
  • 原文地址:https://www.cnblogs.com/dawnminghuang/p/4435991.html
Copyright © 2011-2022 走看看