码迷,mamicode.com
首页 > 系统相关 > 详细

Linux Shell学习简单小结

时间:2015-04-08 18:20:15      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

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?技术分享技术分享

  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?技术分享技术分享

  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?技术分享技术分享

  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?技术分享技术分享

  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                 技术分享 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?技术分享技术分享

  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学习简单小结

标签:

原文地址:http://my.oschina.net/sniperLi/blog/397504

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!