• shell编程总结


    1、shell是解析性语言----》给系统管理员使用  c:编译性语言

    什么是shell:它是一个用户与内核的接口程序,解析用户命令告诉内核

    2、shell的分类:sh   bash  ....

    which cd是无法查看的,因为它是内部命令

    ls:可执行文件,从环境变量的路径上找到的

    3、shell脚本:

    后缀:.sh  ----->  test.sh

    通过约定的格式将命令组合起来,实现自动化.

    如:#!/bin/bash

    echo "hello"

    解析器解析命令和变量(这里的变量是没有类型的)

    3、1变量:

      1、自定义变量   2、环境变量   3、预定义变量    4、位置变量

    1、自定义变量

      定义:myname = "123"

      引用:$myname

    2、环境变量

      export PATH=$PATH:/usr/local

    环境变量PS1=

    3、位置变量

    描述:$0 $1  --- $9

    作用:用于外部传参

    4、预定义变量

    $#:命令行中位置参数的个数

    $*:所有命令行中位置参数的值

    #!/bin/bash
    #echo "helloworld"
    echo "helloworld"
    myname="ltest tt" 
    echo $myname
    
    fruit=apple
    mytree='$fruit tree'
    echo $mytree
    
    today='today is `date``
    echo $today
    
    #echo $0
    #echo $1
    #echo $2
    #echo $#
    #echo $*

    -------------------------------------------------------------

    3、特殊字符

    1、引号:“” ,‘’, ``.

    "":特殊字符保留自己的特性

    myname = "hello"

    echo "$myname is hello"

    结果:hello is hello

    ‘’:全部当做字符串来处理

    “$myname is hello”

    结果:$myname is hello

    ``:解析命令

    today = "today is `data`"

    2、管道  |  将一个命令的输出作为另一个命令输入

    ls -l | wc -w

    3、通配符  * ? []  

    *:代表任意字符

    ?:代表任意一个字符

    [abc] :代表一个指定范围内的字符,即匹配a,b,c中任意字符

    3、重定向:

    >:直接清空

    >>:追加

    1 #!/bin/bash
    2 SIZE=`du -sh /var/lib/mysql`
    3 DAY=`date +%Y%m%d`
    4 echo "day: $DAY" >> /tmp/dbinfo.txt
    5 echo "size: $SIZE" >> /tmp/dbinfo.txt
    6 cd /opt/dbbak/
    7 tar czvf mybak${DAY}.tar.gz /tmp/dbinfo.txt /var/lib/mysql
    8 rm /tmp/dbinfo.txt

    shell的运算

    ff = `expr 4 + 5`

    echo $ff

    或者

    let a = 4+5

    echo $a

    -------------------------------------------------------------------

    字符串的处理

    var = "hello"

    echo "${#var}"//统计变量var中字符串的大小....

    复杂一点:sed awk

    --------------------------------------------------------

    条件测试操作

    命令: 1.test 条件表达式
    2.[ 条件表达式 ]
    $? 0 ->真 非0-->假
    条件表达式类型
    文件状态/字符串比较/整数值比较/逻辑测试


    1. 文件状态:
    test 操作符 文件
    2.字符串符比较
    [ 字符串1 == 字符串2 ]
    3.整数值比较
    [ 整数1 操作符 整数2 ]
    -eq
    4. 逻辑测试
    && --> -a
    || ---> -o
    !:
    [ $b -gt 0 ] || [ &c -gt 0 ] && [ &a -gt 0 ]

    1 #!/bin/bash
    2 RATE=`df -hT | grep "/mnt/hgfs" | awk '{print $6}' | cut -d "%" -f 1`
    3 if [ $RATE -gt 80 ]
    4 then
    5     echo "waing"
    6     echo "eaing"
    7 fi

    2.6 语句
    1.if
    if 条件测试表达式
    then
    命令集
    fi
    -------------------------
    if 条件测试表达式
    then
    命令集1
    else
    命令集2
    fi
    -------------------------
    if 条件测试表达式1
    then
    命令集1
    elif 条件测试表达式2
    then
    命令集2
    elif 条件测试表达式3
    then
    命令集3

    else
    命令集4
    fi

    2、for

    2.for
    for 变量名 in 取值列表
    do
    命令集
    done

    1 #!/bin/bash
    2 for TM in "moring" "noon" "evening"
    3 do
    4     echo $TM
    5 done

    3.while
    while 测试表达式
    do
    命令集

    1 #!/bin/bash
    2 i=1
    3 while [ $i -le 6 ]
    4 do
    5     echo "hello"
    6     i=`expr $i + 1`
    7 done

    4.case
    case 变量 in
    值1)
    命令集
    ;;

    值2)
    命令集
    ;;
    *)
    命令集
    ;;
    esac

     1 #!/bin/bash
     2 case $1 in
     3 start)
     4     echo "start-----"
     5     ;;
     6 stop)
     7     echo "stop-----"
     8     ;;
     9 *)
    10     echo "---------"
    11     ;;
    12 esac

    2.7其它
    break  //跳出循环
    continue

    read

    #!/bin/bash
    read -p "hekfe" nf  //从键盘输入,传给nf...
    echo $nf

    2.8函数
    1。声明
    function 函数名
    {
    命令集
    }

    函数名()
    {
    命令集
    }

    2.调用
    函数名

    1 #!/bin/bash
    2 adder()
    3 {
    4     echo `expr $1 + $2`
    5 }
    6 adder 12 34
    7 adder 11 22
  • 相关阅读:
    maven打包成jar文件与打包成tar.gz文件
    maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
    Nginx监听多个端口配置实例 Linux
    怎么修改redis-cli访问的地址
    eclipse的.properties文件中文显示问题
    Linux关闭防火墙命令red hat/CentOs7
    CentOS 7防火墙快速开放端口配置方法
    Window下Beego环境搭建和bee工具使用
    .netcore2.1 使用middleware对api请求头进行验证
    .netcore2.1 统一接口返回属性名称
  • 原文地址:https://www.cnblogs.com/defen/p/5471743.html
Copyright © 2020-2023  润新知