shell编程心得

参考地址:

http://blog.csdn.net/zhuying_linux/article/details/6630220


优点:

shell简单、灵活,,对于linux系统的自动化管理非常有帮助,可以让系统管理员的工作变得容易、简单、高效。shell脚本可以在unix和linux系统中灵活移植。shell脚本方便获取和修改源码,不需要编译。

shell在linux很多地方都用到,熟悉shell命令,可以帮助解决一些故障问题。对于一个系统运维工程师来说是必要的。而且面试都会涉及到shell编程的内容。

 

缺点:

考虑效率时,例如一些算法的要求,就很少使用shell。例如一些复杂的算术运算,一般使用其它编程语言。

跨平台的需求。java和c语言都可以

复杂的编程需求。

安全性要求比较高的任务。

大规模文件操作。

多维数组支持。

数据结构支持。

图形化界面。

直接的系统硬件操作。

I/O或socket接口。

使用到库或者接口。

私人目的。

对于python用于机器学习,设计算法。或者设计脚本语言都是可以的,python的最大优势在于代码简单。

像matlab和r语言就比较适合一些计算处理。java在jsp,android,hadoop等都有很好的应用,c是比较低层的语言,对于一些底层的开发和深入的应用可以优先考虑。

 

第一个shell脚本tt.sh

 

#!/bin/bash

ls -l > dir.txt

 

通常shell脚本以.sh为后缀。在编写shell时,第一行一定要指明系统需要哪种shell解释用户的shell程序。因此,我们在执行的时候可以使用

sh tt.sh

或者使用

chmod 755 tt.sh

./tt.sh

先说第一个sh或者bash都可以执行tt.sh,他本来就是个bash脚本,用bash去执行无可厚非,但是用sh执行是为什么?sh是bash的链接文件,sh -> bash,可以从/bin/目录下查看,所以sh说白了就是使用的bash命令。另外,我们也可以使用-n或者-x来追踪bash程序的执行,#代表的是注释。

再说第二个,默认的tt.sh的权限是644,可以使用ls -al来查看,确实是rw_r__r__,没有执行权限,怎么执行.这里的主要原因是linux有个掩码值,跟ip地址的掩码有点类似。通过与掩码做运算才得到创建文件的权限。你可以去修改它,不过这里,对于既定的644,只有通过chmod来修改了,w代表是1,644每个位置加上1变成755,现在owner,group,others都可以执行它了

再说里面的内容ls -l > dir.txt。ls是列出某目录内容的命令。后面可以跟很多参数,用'man 命令'或者 '命令--help'自己去查吧,里面的东西很多,很强大。>是重定向。这个是输出重定向,是不是和c++的那个>>很像,这里也有>>。>代表是覆盖输出重定向,>>代表是追加输出重定向,就看输出到文件的内容会不会覆盖原来的东西。有输出重定向就有输入重定向。cat tt.sh这里用到了输入重定向,但是什么都没有额。tt.sh的内容重定向给了cat,可以加上一个<,变成cat < tt.sh,效果是一样的。还是前面的比较简单吧。

管道 | 

这个也是经常使用的命令,|前面输出的东西作为输入给|后面的命令,因为有很多的时候你需要组合使用一些命令,最常用的组合就是查找过滤,ls -al 显示的东西太多,我们可以使用 ls -al | grep "xx"。这样,ls显示的东西,只有grep匹配到的才会显示出来。

shell里的特殊字符

特殊字符非常的重要,要想写出复杂的脚本,除了要对linux命令要了解以外,还要对特殊字符有所掌握,因为很多东西离开他根本处理不了。

$

最经常用到的地方就是引用变量内容,例如

a=10

echo $a

输出的就是a的值,如果不加$,输出的就是空。

另外,在脚本中加入

echo $#

echo $0

echo $1

echo $*

echo $@

执行 sh tt.sh 11 22 33

输出结果

3--输入参数个数

tt.sh--文件名

11--第一个参数

11 22 33--列出所有参数

11 22 33--同上

这些特殊符号在处理一些逻辑的时候是非常有用的。

""和''

这两个好像一样,但其实不一样。一样的地方是,里面的都是字符串。不一样的地方在于,$ 倒引号反斜线对于""是可以识别的,保留它的功能,对于''统统看作是字符串。

echo "$#"-----------3

echo '$#'-----------$#

倒引号``

esc下面的那个。倒引号可以和双引号,单引号并列来看,单引号最强,一切都是字符串,倒引号则是执行里面的语句。经常用在""中间。

运算符

就拿if来说,比较涉及的东西就非常的多。

bash中常用的条件测试

[ expression ]

[[ expression ]]

test expression

一般只使用一个大括号就可以,不行的时候试试两个,在不同的shell有不同的要求。

数字的比较和字符串的比较不同

数字的比较:

if [$1 -lt 10]--判断$1的值是否小于10

-gt 大于 -eq 等于 -ne 不等于 -ge 大于等于 -lt 小于等于

字符串的比较:

if [[ "$1" = "xiaobai"]]--也可以使用!=

if [ $1 -lt 10 ];then

       echo "lt"

fi

判断语句的格式 if ; then fi 四个元素缺一不可,单大括号和双大括号都可以。但是大括号与第一个变量之间要有空格否则会报错。

if [ "$1" = "10" ];then

       echo "lt"

fi

字符串的比较,单双大括号也都可以,=号只有一个。

 

-e FILE:文件是否存在

-f FILE:文件是否为普通文件

-d FILE:文件是否为目录

 

算术运算的几种结构

let算术运算表达式

let C=$A+$B

echo $C

 

echo $[$A+$B]

 

echo $(($A+$B))

 

echo `expr $A + $B`

 

case的基本格式

case ... in
...) do something here ;;
esac

 

打印99乘法表

for i in {1,2,3,4,5,6,7,8,9}

do

    forj in {1,2,3,4,5,6,7,8,9}

    do

       ((product=$i*$j))

       echo -ne $i\*$j=$product"\t"

    done

    echo

done

exit 0

里面for循环的基本格式为,for in {} do  do done。这是个双重的for循环。echo -ne 是不换行,并识别\转义。echo 就是换行一下。

你可能感兴趣的:(服务器运维)