截取語法

a="g8g8ffgg"
expr substr "$a" 1 8


矩陣定義

a=$(ifconfig "${1}" )
name=($a)


矩陣

  AICMP="0 3 3/4 4 11 12 14 16 18"
  for tyicmp in $AICMP
  do
    echo $tyicmp
  done


指令放在矩陣例子

cown=$(ifconfig | sed -n '/Link/{N;s/\(^[^ ]*\).*inet addr:\([0-9.]*\).*/\1  \2/p}' | wc -l)
D1=($cown)


all=$(ifconfig | sed -n '/Link/{N;s/\(^[^ ]*\).*inet addr:\([0-9.]*\).*/\1  \2/p}' | awk '{print $1 }' | sed -n $i'p')
D2=($all)


D1 D2 為矩陣


取得單一字元

ifconfig eth0 |grep "HWaddr" | cut -c 1-1


抓有幾個網卡

ifconfig | sed -n '/Link/{N;s/\(^[^ ]*\).*inet addr:\([0-9.]*\).*/\1  \2/p}'


找IP位址shell

ifconfig | awk -F'[ :]+' '/Bcast/{print $4}'
ifconfig | awk -F'[ :]+' '/Mask/{print $4}'


判斷eth0位置

 # 顯示文件中的第一行 (模擬「head -1」命令)
 sed q

 # 顯示文件中的最後10行 (模擬「tail」)
 sed -e :a -e '$q;N;11,$D;ba'

 # 顯示文件中的最後2行(模擬「tail -2」命令)
 sed '$!N;$!D'

 # 顯示文件中的最後一行(模擬「tail -1」)
 sed '$!d'                        # 方法1
 sed -n '$p'                      # 方法2


in internet
有同事問我怎麼在 Linux 中顯示出檔案中的某一行,像這樣的功能使用 sed 來做是非常簡單地就可以辦到了,由以下的簡單的範例來說明用法。

[sam@sever ~]$ cat testfile
12345
abcdefghijkl
678901234
mnopqrstuvwxyz
[sam@sever ~]$ sed -n '2p' testfile
abcdefghijkl

在 testfile 這個檔案裡有四行文字,接著使用 sed -n '2p' testfile 可以將第二行的內容顯示出來。如果要顯示別行,就將 2 改成該行號即可。 
 


存指令為變數的方法

 a=$(ifconfig | sed -n '/Link/{N;s/\(^[^ ]*\).*inet addr:\([0-9.]*\).*/\1  \2/p}' | awk '{print $1 }' | sed -n $i'p')
        name=($a)
        echo ${name[1]} 


echo -n 不换行输出

 

$echo -n "123"

$echo "456"

 

最终输出 

123456

 

而不是

123

456

 

echo -e 处理特殊字符

 

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\a 发出警告声;

\b 删除前一个字符;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab

\v \f相同;

\\ 插入\字符;

\nnn 插入nnn(八进制)所代表的ASCII字符;

 

$echo -e "a\bdddd"

dddd

 

$echo -e "a\adddd" //输出同时会发出报警声音

adddd

 

 

$echo -e "a\ndddd" //自动换行

a

dddd


shell中计算除法,基本的方法有几种

t1=3

t2=6

1expr

num=`expr $(($t1/$t2))`

num的结果为0,因为expr不支持浮点算法

2bc

echo "scale=2;$t1/$t2"|bc

scale用来控制小数点后面保留的位数

3awk

awk 'BEGIN{printf "%.2f%\n",('$t1'/'$t2')}'

awk 'BEGIN{printf "%.2f%\n",('$t1'/'$t2')*100}'


shell字元串比較判斷是否為數字

整數比較

-eq 等於,:if [ "$a" -eq "$b" ]
-ne
不等於,:if [ "$a" -ne "$b" ]
-gt
大於,:if [ "$a" -gt "$b" ]
-ge
大於等於,:if [ "$a" -ge "$b" ]
-lt
小於,:if [ "$a" -lt "$b" ]
-le
小於等於,:if [ "$a" -le "$b" ]
<
小於(需要雙括弧),:(("$a" < "$b"))
<=
小於等於(需要雙括弧),:(("$a" <= "$b"))
>
大於(需要雙括弧),:(("$a" > "$b"))
>=
大於等於(需要雙括弧),:(("$a" >= "$b"))

字元串比較

= 等於,:if [ "$a" = "$b" ]
==
等於,:if [ "$a" == "$b" ],=等價
注意:==的功能在[[]][]中的行為是不同的,如下:
1 [[ $a == z* ]] #
如果$a"z"開頭(模式匹配)那麼將為true
2 [[ $a == "z*" ]] #
如果$a等於z*(字元匹配),那麼結果為true
3
4 [ $a == z* ] # File globbing
word splitting將會發生
5 [ "$a" == "z*" ] # 如果$a等於z*(字元匹配),那麼結果為true
一點解釋,關於File globbing是一種關於文件的速記法,比如"*.c"就是,再如~也是.
但是file globbing並不是嚴格的正則表達式,雖然絕大多數情況下結構比較像.
!=
不等於,:if [ "$a" != "$b" ]
這個操作符將在[[]]結構中使用模式匹配.
<
小於,ASCII字母順序下.:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]

注意:[]結構中"<"需要被轉義.
>
大於,ASCII字母順序下.:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]

注意:[]結構中">"需要被轉義.
具體參考Example 26-11來查看這個操作符應用的例子.
-z
字元串為"null".就是長度為0.
-n
字元串不為"null"
注意:
使用-n[]結構中測試必須要用""把變數引起來.使用一個未被""的字元串來使用! -z
或者就是未用""引用的字元串本身,放到[]結構中。雖然一般情況下可
以工作,但這是不安全的.習慣於使用""來測試字元串是一種好習慣.

awk '{print $2}' class.txt | grep '^[0-9.]' > res

–b
file存在並且是塊文件時返回真
-c file存在並且是字元文件時返回真
-d pathname存在並且是一個目錄時返回真
-e pathname指定的文件或目錄存在時返回真
-f file存在並且是正規文件時返回真
-g 當由pathname指定的文件或目錄存在並且設置了SGID位時返回為真
-h file存在並且是符號鏈接文件時返回真,該選項在一些老系統上無效
-k 當由pathname指定的文件或目錄存在並且設置了「粘滯」位時返回真
-p file存在並且是命令管道時返回為真
-r 當由pathname指定的文件或目錄存在並且可讀時返回為真
-s file存在文件大小大於0時返回真
-u 當由pathname指定的文件或目錄存在並且設置了SUID位時返回真
-w 當由pathname指定的文件或目錄存在並且可執行時返回真。一個目錄為了它的內容被訪問必然是可執行的。
-o 當由pathname指定的文件或目錄存在並且被子當前進程的有效用戶ID所指定的用戶擁有時返回真。


case

#!/bin/ash

case $1 in
    0 )
        ./A
        ;;
    1 )
        ./A 

        ;;
esac


if

c=$(grep "$1=" work2.txt)
echo "$c"

if [ "$c" != "" ]
then
    echo "foud"
elif [ "$c" = "" ]
then
    echo "not found"
fi

正確

if [ "${name[i]}" = "HWaddr" ]
 then
echo "dddddddddddddddddddddddddddddddddddd"
fi



Bash shell 有提供一維陣列的功能
A[0]=1
A[1]=2
A[2]=3

echo "${A[0]} , ${A[1]} , ${A[2]}"

=======

上式也可以一次設定:

A=(1 2 3)

echo "${A[0]} , ${A[1]} , ${A[2]}"

結果是一樣的!

========

也可用字串當 陣列 的索引:

A["bash"]="Hello World"

echo ${A["bash"]}

結果出現 Hello World


待續0...0

arrow
arrow
    文章標籤
    shell script
    全站熱搜

    JL8051 發表在 痞客邦 留言(0) 人氣()