Linux Shell学习简单小结

shelllinuxperformancefunctionfile

if-fi

[cpp] view plaincopyprint?

  1. #! /bin/bash  

  2. # 删除文件 和 新建文件  

  3. file=readme  

  4. function delFile(){  

  5.     if [ -e ./$file ];then  

  6.         rm -f ./$file  

  7.         echo "del $file ..."  

  8.     fi  

  9. }  

  10. function addFile(){  

  11.     if [ ! -f ./$file ];then  

  12.         touch $file  

  13.         echo "add $file ..."  

  14.     fi  

  15. }  

  16. delFile  

  17. addFile  

#! /bin/bash # 删除文件 和 新建文件 file=readme function delFile(){    if [ -e ./$file ];then        rm -f ./$file        echo "del $file ..."    fi } function addFile(){    if [ ! -f ./$file ];then        touch $file        echo "add $file ..."    fi } delFile addFile

Result:

(没有readme文件)

[work shell]$ sh if_e.sh
add readme ...
[workshell]$ sh if_e.sh
del readme ...
add readme ...

===================================================

if-else-fi

[cpp] view plaincopyprint?

  1. #! /bin/bash  

  2. echo "press y hello"  

  3. read str  

  4. if [ "$str" = "y" ] || [ "$str" = "Y" ];then  

  5.     echo "hello"  

  6. else  

  7.     echo "bye.."  

  8. fi;  

#! /bin/bash echo "press y hello" read str if [ "$str" = "y" ] || [ "$str" = "Y" ];then    echo "hello" else    echo "bye.." fi; 

Result:

[work shell]$ sh if.sh
press y hello
y
hello
[work shell]$ sh if.sh
press y hello
n
bye..

===================================================

if-elif-else-if(函数传参1)

[python] view plaincopyprint?在CODE上查看代码片

  1. # !/bin/sh  

  2.   

  3. type=1    # 1, 2, 3(a,abc,123)  

  4.   

  5.   

  6. function getVal(){  

  7.     echo "$1"  

  8. }  

  9.   

  10.   

  11. if [ "$type" == "1" ]; then  

  12.     for((i=0;i<4;i++))  

  13.     do  

  14.         eval getVal $i  

  15.     done  

  16. elif [ "$type" == "2" ]; then  

  17.     echo "type"  

  18. else  

  19.     echo "none"  

  20. fi  

# !/bin/sh

type=1    # 1, 2, 3(a,abc,123)


function getVal(){
    echo "$1"
}


if [ "$type" == "1" ]; then
    for((i=0;i<4;i++))
    do
        eval getVal $i
    done
elif [ "$type" == "2" ]; then
    echo "type"
else
    echo "none"
fi

Result:
yanggang@barry$ ./param.sh 
0
1
2

3

===================================================

if-elif-else-if(函数传参2)

[python] view plaincopyprint?在CODE上查看代码片

  1. # !/bin/sh  

  2.   

  3. #type=1    # 1, 2, 3(a,abc,123)  

  4.   

  5.   

  6. function getVal(){  

  7.     echo "$1"  

  8. }  

  9.   

  10. function inputVal(){  

  11.     if [ "$1" == "1" ]; then  

  12.         for((i=0;i<4;i++))  

  13.         do  

  14.             eval getVal $i  

  15.         done  

  16.     elif [ "$1" == "2" ]; then  

  17.         echo "type"  

  18.     else  

  19.         echo "none"  

  20.     fi  

  21. }  

  22.   

  23. inputVal 1      # 1 is a param  

# !/bin/sh

#type=1    # 1, 2, 3(a,abc,123)


function getVal(){
    echo "$1"
}

function inputVal(){
    if [ "$1" == "1" ]; then
        for((i=0;i<4;i++))
        do
            eval getVal $i
        done
    elif [ "$1" == "2" ]; then
        echo "type"
    else
        echo "none"
    fi
}

inputVal 1      # 1 is a param

Result:

yanggang@barry$ ./param.sh 

0
1
2

3

===================================================

case 条件

mysql 

[python] view plaincopyprint?在CODE上查看代码片

  1. #!/bin/bash  

  2.   

  3. case "$1" in  

  4.     start)  

  5.         echo "mysql start..."  

  6.         /etc/init.d/mysqld start  

  7.         ;;  

  8.     stop)  

  9.         echo "mysql stop..."  

  10.         /etc/init.d/mysqld stop  

  11.         ;;  

  12.     restart)  

  13.         echo "mysql restart..."  

  14.         /etc/init.d/mysqld stop  

  15.         /etc/init.d/mysqld start  

  16.         ;;  

  17. esac  

  18.   

  19. exit 0  

#!/bin/bash

case "$1" in
    start)
        echo "mysql start..."
        /etc/init.d/mysqld start
        ;;
    stop)
        echo "mysql stop..."
        /etc/init.d/mysqld stop
        ;;
    restart)
        echo "mysql restart..."
        /etc/init.d/mysqld stop
        /etc/init.d/mysqld start
        ;;
esac

exit 0


httpd(apache)

[python] view plaincopyprint?在CODE上查看代码片

  1. #!/bin/bash  

  2.   

  3. case "$1" in  

  4.     start)  

  5.         echo "apache start..."  

  6.         /etc/init.d/httpd start  

  7.         ;;  

  8.     stop)  

  9.         echo "apache stop..."  

  10.         /etc/init.d/httpd stop  

  11.         ;;  

  12.     restart)  

  13.         echo "apache restart..."  

  14.         /etc/init.d/httpd restart  

  15.         ;;  

  16.     status)  

  17.         echo "apache status"  

  18.         /etc/init.d/httpd status  

  19.         ;;  

  20. esac  

  21.   

  22. exit 0  

#!/bin/bash

case "$1" in
    start)
        echo "apache start..."
        /etc/init.d/httpd start
        ;;
    stop)
        echo "apache stop..."
        /etc/init.d/httpd stop
        ;;
    restart)
        echo "apache restart..."
        /etc/init.d/httpd restart
        ;;
    status)
        echo "apache status"
        /etc/init.d/httpd status
        ;;
esac

exit 0


===================================================

awk 

[python] view plaincopyprint?

  1. #! /bin/bash  

  2. # 统计type类型文件,总共含有多少行  

  3. type="*.h *.cpp"  

  4. result="result.txt"  

  5. # 统计函数  

  6. function cal_lines()  

  7. {  

  8.     rm -f $result  #删除文件  

  9.     for file in `ls $type`; do  

  10.         wc -l $file >> $result #新建并追加统计行数到文件  

  11.     done     

  12.           

  13.     awk '{total+=$1} END {print total}' $result >> $result  #awk累加第一列,相加结果为total  

  14. }  

  15. cal_lines     #调用函数  

  16. cat $result   #查看结果  

#! /bin/bash # 统计type类型文件,总共含有多少行 type="*.h *.cpp" result="result.txt" # 统计函数 function cal_lines() {    rm -f $result  #删除文件    for file in `ls $type`; do        wc -l $file >> $result #新建并追加统计行数到文件    done              awk '{total+=$1} END {print total}' $result >> $result  #awk累加第一列,相加结果为total } cal_lines     #调用函数 cat $result   #查看结果  

Result: 

[work]$ sh cal_lines.sh
ls: *.h: No such file or directory
91 test_performance_server.cpp
178 test_performance_ubclient1.cpp
230 test_performance_ubclient2_common_async.cpp
204 test_performance_ubclient2_common_block.cpp
206 test_performance_ubclient2_common_nonblock.cpp
191 test_performance_ubclient2_common_single_block.cpp
193 test_performance_ubclient2_common_single_nonblock.cpp
237 test_performance_ubclient2_nshead_async.cpp
220 test_performance_ubclient2_nshead_block.cpp
218 test_performance_ubclient2_nshead_nonblock.cpp
192 test_performance_ubclient2_nshead_single_block.cpp
192 test_performance_ubclient2_nshead_single_nonblock.cpp
2352 

 

===================================================

 linux实现两个文件内容相加(3种解法)

 

 a.txt(10行)     b.txt(9行)

 

  a.txt                 Linux Shell学习简单小结 b.txt

 

解法一

[python] view plaincopyprint?

  1. awk 'NR==FNR{a[NR]=$1; b[NR]=$2}   

  2. NR > FNR{print $1 + a[FNR], $2+b[FNR]}' a.txt b.txt  

awk 'NR==FNR{a[NR]=$1; b[NR]=$2} NR > FNR{print $1 + a[FNR], $2+b[FNR]}' a.txt b.txt  

运行结果:

[work]$ sh cal_ab1.sh
1 83
1 77
0 128
24 195
1 130
68 227
5 132
197 233
9 146

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

解法二

[python] view plaincopyprint?

  1. paste a.txt b.txt > c.txt  

  2. while read a b c d; do  

  3.     echo $((a+c))  $((b+d))  

  4. done < c.txt  

paste a.txt b.txt > c.txt while read a b c d; do    echo $((a+c))  $((b+d)) done < c.txt

运行结果:

[work]$ sh cal_ab2.sh
1 83
1 77
0 128
24 195
1 130
68 227
5 132
197 233
9 146
0 8

 

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

解法三

[python] view plaincopyprint?

  1. paste a.txt b.txt | awk '{print $1+$3 "/t" $2+$4}'  

paste a.txt b.txt | awk '{print $1+$3 "/t" $2+$4}'

运行结果:

[work]$ sh cal_ab3.sh
1       83
1       77
0       128
24      195
1       130
68      227
5       132
197     233
9       146
0       8 

 

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

评析:

解法一,结果不准确,只输出了前9行

解法二,结果正确,但不够简洁

解法三,结果正确,简洁

===================================================

 while循环

[python] view plaincopyprint?在CODE上查看代码片

  1. # !/bin/sh  

  2.   

  3. TOP_NUM=800  

  4. index=0  

  5.   

  6.   

  7. function url_down(){  

  8.   

  9. while [ $index -le $TOP_NUM ]  

  10.     do  

  11.        echo $index  

  12.         index=`expr $index + 24`  

  13. done  

  14.   

  15. }  

  16.   

  17. url_down  

# !/bin/sh

TOP_NUM=800
index=0


function url_down(){

while [ $index -le $TOP_NUM ]
    do
       echo $index
        index=`expr $index + 24`
done

}

url_down


运行结果:

yanggang@barry$ ./tmp.sh 
0
24
48
72
96
120
144
168
192
216
240
264
288
312
336
360
384
408
432
456
480
504
528
552
576
600
624
648
672
696
720
744
768
792

 

你可能感兴趣的:(Linux Shell学习简单小结)