zoukankan      html  css  js  c++  java
  • linux第4天 shell socket

     $[ ] 表示形式告诉shell对方括号中的表达式求值

     echo $[3+9] 

      赋值运算符

      =,+=,-=,*=,/=,%=,&=,^=、|=,<<=,>>=

      let count = $count + $change

      let count += $change

    cat longfile |more使用分页

     tee   命令把结果输出到标准输出,另一个副本输出到相应文件

     该命令一般用于管道之后  (一般看到输出,并存文件)

    合并标准输出和标准错误

    grep “standard” standard.txt >grep.out 2>&1 

    文件状态测试

     格式    test condition    或 [ condition ]

    使用方括号时,要注意在条件两边加上空格。

    文件测试状态 :测试的结果可以用$?(上一个命令的返回值)的值来判断,0表示成功,其他为失败

    -d       目录                   -s        文件长度大于0、非空

    -f        正规文件           -w       可写

    -L      符号链接          -u        文件有suid位设置

    -r       可读                  -x        可执行

    -z        字符串为空

    数值测试

     格式    测试两个数值大小

        "number" numberic_operator "number"
        或者
        [ "number" numberic_operator "number" ]
        numberic_operator可为:
        -eq         数值相等。
        -ne         数值不相等。
        -gt         第一个数大于第二个数。
        -lt          第一个数小于第二个数。
        -le         第一个数小于等于第二个数。
        -ge         第一个数大于等于第二个数。

    语法1

    if 条件

    then 命令

    fi

    注意if语句必须以fi终止

    练习:

    #if test

    if [ "13" -lt "12" ]; then # "13" 前一个空格,“13”后也有一个空格。

      ...to do

    fi

    CASE

    #!/bin/bash

    #case select

    echo -n "enter a number from 1 to 3:"

    read num

    case $num in

    1)

            echo "you select 1"

            ;;

    2)

            echo "you select 2"

            ;;

    3)

            echo "you select 3"

            ;;

    y|Y)

            echo “you select y”

            ;;

    *)

            echo "`basename $0`:this is not between 1 and 3">&2

            exit;

            ;;

    esac

    for

     #!/bin/bash

     start=`ipcs | sed -n '/共享内存段/='`
     end=`ipcs | sed -n '/信号量数组/='`

     for i in `ipcs | sed -n ${start},${end}p | grep slmax | awk '{print $2}'`
     do
     echo -e $i
     done

    until

    #!/bin/sh

    #until_mom 监控分区

    Part="/backup"

    Look_Out=`df | grep "$Part" | awk '{print $5}' | sed 's/%//g' `

    echo $Look_Out;

    until [ "$Look_Out" -gt "90" ]

    do

             echo -e "Filesystem $Part is nearly full " | mail root

             Look_Out=`df | grep "$Part" | awk '{printf $5}' | sed 's/%//g' `

             sleep 3600

    done

    while

     #!/bin/bash
     while echo -n "请输入一个字符:";read ch
    do
     echo $ch
     done

    A{3}B   AAAB

    A{3,}B AAAB AAAAB ...

    A{3,5}B AAAB AAAAB AAAAAB 

    行首以^匹配

    行尾以$匹配

    ^$   匹配空行

    ^.$  匹配包含一个字符的行

    使用屏蔽一个特殊字符的含义

    假定要匹配任意一个数字,可以使用:

    [0123456789]

    然而,通过使用“-”符号可以简化操作:

    [ 0  -  9  ]

    或任意小写字母

    [  a  -  z  ]

    要匹配任意字母,则使用:

    [  A  -  Z  a  -  z  ]

    表明从A - Z、a - z的字母范围。

    如要匹配任意字母或数字,模式如下:

    [  A  -  Z  a  -  z  0  -  9  ]

    在字符序列结合使用中,可以用 [ ]指出字符范围。假定要匹配一单词,以 s开头,中间有

    任意字母,以t结尾,那么操作如下:

    s[a-z A-Z]t

    [ou] .*t

    匹配以字母o或u开头,后跟任意一个字符任意次,并以t结尾的任意字母。

    注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。

    [^a-zA-Z]匹配任一非字母型字符

    [  ^  0  -  9  ]匹配任一非数字

    5.8使用{}匹配模式结果出现的次数

    使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用 { },此模式有三种

    形式,即:

    pattern{n} 匹配模式出现n次。

    pattern{n,} 匹配模式出现最少n次。

    pattern{n,m} 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。

    请看第一个例子,匹配字母A出现两次,并以B结尾,操作如下:

    A    {  2    }  B ;A出现2次匹配值为A A B

    A    {  4  ,    }  B;匹配A至少4次

    可以得结果A A A A B或A A A A A A A B,但不能为A A A B。

    如给出出现次数范围,例如A出现2次到4次之间:

    A    {  2  ,  4    }  B

    则结果为A A B、A A A B、A A A A B,而不是A B或A A A A A B等。

    [0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3}; 匹配IP地址 

    find -name *sh | xargs grep "done" -n 从当前目录往下查找文件以sh结尾的,并且文件内容里有 "done"字符串,列出来并打印该字符串在第几行

    而grep一般只是筛选出上一次屏幕打印出来的内容

    find -name *.sh | xargs grep "done" -n | awk -F":" '{print $1, " ", $2}'

    sed -n '2,5p'  打印第二到第五行

    df | sed -n ${AAA},${BBB}p 有变量情况下的打印

    sed -n $

    sed -n '/关键字/=' 返回关键字所在的行数

    sed -i 's/old/new/g'  把old替换成new

    什么是socket?

      socket可以看成是用户进程与内核网络协议栈的编程接口。

      socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。

      IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中

    网络字节序

    X86平台一般为小端字节序,网络一般为大端.我们发送数据的时候,一般要将发送的数据转换为网络字节序(大端),在接收的时候又要转换回来.

    字节序转换函数

      uint32_t htonl(uint32_t hostlong);

      uint16_t htons(uint16_t hostshort);

      uint32_t ntohl(uint32_t netlong);

      uint16_t ntohs(uint16_t netshort);

      说明:在上述的函数中,h代表host;n代表network s代表short;l代表long

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

    地址转换函数

      #include <netinet/in.h>

      #include <arpa/inet.h>

     int inet_aton(const char *cp, struct in_addr *inp);

      in_addr_t inet_addr(const char *cp);

    char *inet_ntoa(struct in_addr in);

  • 相关阅读:
    文档翻译第002篇:Process Monitor帮助文档(Part 2)
    Hexo-设置阅读全文
    hexo 添加标签
    防御暴力破解SSH攻击
    Hexo NexT主题添加点击爱心效果
    【干货】2个小时教你hexo博客添加评论、打赏、RSS等功能 (转)
    svn命令在linux下的使用
    hexo 配置文件 实例
    Hexo安装配置详解
    markdown编辑
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5240581.html
Copyright © 2011-2022 走看看