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, "\t\t\t", $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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM