Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46150
  • 博文数量: 18
  • 博客积分: 474
  • 博客等级: 下士
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-20 10:08
文章分类

全部博文(18)

文章存档

2011年(18)

分类: LINUX

2011-07-04 09:47:30

 shell01.rar  
找到系统上所有设定了特权位的程序
# find / -perm -u=s


找到/etc/目录下的所有*.conf 配置文件,并且通过tar打包,保存在/tmp/xxxx-xx-xx.tar

# find /etc/  -name "*.conf" -exec tar rvf /tmp/2011-07-02.tar {} \;


脚本:
    基本命令[ +语法+特定格式]=shell脚本


    特定格式:
            魔法字节

执行shell
    .  /path/to/script    在当前shell执行脚本里的代码
    bash /path/to/script  使用指定bash作为子shell执行脚本
    /path/to/script  <---魔法字节是生效 , 子shell执行脚本



注释符号
    #


变量
    一个名字,可以保存其他内容(值)
变量定义
    变量名字=变量的值
    var=value
    a=1
    b=tom
    c="wel to upl"

    注意:
        “=“ 两边不能有空格       


变量替换/取出变量的值
    $或者${}都是取值符号
    $var

变量分类:
    普通变量
        自定义的,仅仅在脚本中使用。使用完毕就完成任务的。
    系统变量
        系统定义好的,已经固定了它的作用和意义.
        例如: $1,$2,$3,....,$9,${10},${11}
            $@,$*,$?,$#,$$
    附件中有sh的例子,可以测试出$@..$$的含义:$@和$*是显示输入参数的值,$?返回上次命令执行代码
,$#返回输入的参数总个数,$$返回当前的bash的PID 环境变量
        一般用于影响其他程序的操作。一般都是大写字母作为变量的名字。查看环境变量:env

        例如: PATH,DISPLAY等等
        定义:# export UPL=uplooking

双引号,单引号
    弱,强



例子1:编写一个脚本,使用把nfs服务器上的文件打包成tar,备份到本地/backup目录
10.1.1.22:/share/pub


#!/bin/bash

mount 10.1.1.22:/share/pub   /mnt
cd /mnt
tar cvf /backup/nfsbackup-`date "+%Y-%m-%d"`.tar  *
umount /mnt


例子2:编写一个脚本,要求输出系统所有用户的总数

#/bin/bash
cat /etc/passwd | wc -l



命令替换``,$()
    a=`cat /etc/passwd | wc -l`
    b=$(uname -r)


算术运算
    在shell当中,默认就直接支持简单四则整数运算。
        +,-,*,/,%

    形式一: let ,支持c+=,c语法

    let "b=$a+1" <----"写表达式,符号之间的空格随意"
    let b++

    形式二:expr
    expr $b + 3  <--直接把结果输出,表达式被分成三个参数
    a=`expr $b + 3`

    形式三: $((表达式))
    echo $((7+4))
    echo $(($a+$b))
    echo $((a+b))
    echo $((a++))


浮点数运算:
# echo | awk '{print 7/2}'

bc命令
# echo "scale=2;7/2" |  bc



交互模式给变量赋值
    read


例子:
    编写一个脚本,脚本执行完毕之后,会提示输入一个需要新建的帐号名,输入默认shell的路径,还有家目录所在。

Username:
Shell:
Home:
Password:

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

条件测试
    用于判断所给的条件是否满足

语法格式
    如果expression满足,就执行里面的command
    if [ expression ];then
        command
    fi

    如果expression满足,就执行里面的command1,否则执行else里的command2
    if [ expression ];then
        command1
    else
        command2
    fi   
   
   
    如果expression1满足,就执行里面的command1,如果不满足,就匹配expression2,如果满足就执行command2,否则执行else里的command3
    if [ expression1 ];then
        command1
    elif [ expression2 ];then
        command2
    else
        command3
    fi

    嵌套格式

    if [ expression ];then
        command
        if [ expression ];then
            command1
        else
            command2
        fi
    fi


具有同等作用命令 test , [
查看帮助 man test

    test a = b
    /usr/bin/[a = b ]  <---注意空格


=,!=
-eq,-ne,-gt,-ge,-lt,-le
-e,-f,-r,-w,-x,-L


例子:
    输入一个路径,判断该文件是否为字符链接


例子:
    输入一个路径,判断该文件或目录的权限

    把脚本放在/tmp。给予755权限,用普通帐号执行脚本


输出结果:
    /path/to/File:
    Read=Yes,Write=No,Execute=No

perm.sh



例子:输入用户名,判断用户是否存在,如果存在输出User Exist! 否则输出User not Exist!

user.sh


例子:输入一个年份,判断是否为闰年
    闰年: 能够被4整除并且不能被100整除的就是闰年
        或者能被400整除的也是闰年。


如果 [ 能够被4整除 并且 不能被100整除 ];then
    闰年
再如果
    [ 能被400整除 ];then
    闰年
否则
    不是闰年

runnian.sh




作业:使用脚本完成下面任务
    1、执行一个脚本,交互模式输入一个文件,需要判断这是一个普通文件还是目录,并判断这个文件的权限,把文件类型(文件还是目录),权限结果输出   

    2、判断某个目录下所有文件的大小,并以邮件通知的形式告诉管理员root


    3、交互模式输入一个文件,判断这个文件是否是符号链接文件,如果是,再判断这个文件是否为死链接
    4、交互模式要求输入一个ip,然后脚本判断这个IP 对应的主机是否 能ping 通,输出结果类似于:
    Server  10.1.1.20 is Down!



思考:
    判断一个IP是否合法?

阅读(726) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~