zoukankan      html  css  js  c++  java
  • Linux shell 脚本(一)

    一、初识脚本 

    shell:一类介于系统内核与用户之间的解释程序。
    脚本:一类使用特定语言,按预设顺序执行的文件
    批处理、宏、解释型程序

    创建shell脚本
    理清任务过程--整理执行语句--完善文件结构
    1.任务目标    1.按任务顺序        1.执行环境
    2.先做什么    2.必要的结构控制 2.必要的注释信息
    3.再做什么    3.如何免交互        3.友好的提示
    4.每一步如何实现

    例子
    1)理清任务过程
    1.添加一个名为zhangsan的用户
    添加一个名为zhangsan的用户

    useradd zhangsan


    2.将用户zhangsan的口令设置为123456

    passwd zhangsan


    2)整理执行语句
    useradd zhangsan
    echo 123456| passwd --stdin zhangsan


    3)完善文件结构
    脚本文件:uad.sh
    #!/bin/bash
    #2015-04-12,by Moon
    echo "正在创建用户账号zhangsan..."
    useradd zhangsan
    echo "正在为用户zhangsan设置密码..."
    echo 123456|passwd --stdin zhangsan 
    echo "创建成功。"


    4)执行shell脚本
    方法:
    1. chmod +x uad.sh
      ./uad.sh
    2.  sh/bash uad.sh
    3.  source/. uad.sh


    二、shell命令的组合运用

    管道操作:将一端的命令输出交给另一端的命令处理  方向:单向
    格式:命令1|命令2

    例子

    1.

    find /etc -name "*.conf"  -type f  //查找以.conf结尾的文件
     /etc/autofs_ldap_auth.conf
     .. ..
        find /etc -name "*.conf"  -type f | wc -l   //wc统计 -l按行统计
        308 

    2.

    ps aux | grep httpd  //gerp 过滤只剩与httpd相关的信息


    重定向:改变执行命令时的默认输入、输出

     类型             |     操作符   |用途
    重定向输入    |<               |从指定文件读取数据,而不是从键盘输入    
    重定向输出    | >、>>      |将输出结果覆盖、追加到指定文件
    标准错误输出 |2>、2>>   |将错误信息覆盖、追加到指定文件
    混合输出        |&>、&>> |将标准输出和错误信息覆盖、追加到指定文件

    例子

    1.

    uname -r  //linux 内核版本信息
    2.6.18-194.el5
    uname -r > version.txt  //版本信息保存到了version.txt


    2.

    cat version.txt version2.txt
    2.6.18-194.el5
    cat:version2.txt:没有那个文件或目录
    
    cat version.txt version2.txt 2>error.txt   //把错误信息保存到error.txt中
    2.6.18-194.el5
    cat error.txt
    cat:version2.txt:没有那个文件或目录


    逻辑分隔:处理多条命令之间的逻辑关系
    逻辑与:&&
    逻辑或:||

    顺序执行::


    例子:

    1.

    echo "萝卜" && echo "白菜"
    萝卜
    白菜
    echo "萝卜"||echo "白菜"


    2.

    mkdir /mulu/a  2>/dev/null && echo "成功"
     mkdir /mulu/a  2>/dev/null ||echo "失败"
      失败!


    3.

    cd /boot/grub:ls -lh grub.comf   //-h意味着便于人操作

    三、使用变量

    1.变量基本操作
    定义与赋值:格式:变量名=变量名
    引用变量:格式:$变量名 、${变量名}

    例子:

    Title = Moon
     echo $Title
     Moon
     

     2、定界符号
     双引号、单引号、反撇号
     双引号:允许引用,转义
     单引号:禁止引用、转义
     反撇号,或者$()
     以命令输出进行替换
     
     例子:
     1.
     
    echo "$Title group"
     Moon group
     
     echo '$Title group'
     $Title group 

     2.

     uname -r 
     2.6.18-194.el5
     
     Ver=`uname -r `
     echo $ver
     2.6.18-194.el5


    3.常见的环境变量
    用来记录/设置运行参数
    系统赋值:USER、LOGNAME、HOME、SHELL、......
    用户操作: PATH、LANG、CLASSPATH、.....

    例子:

    1.
    env     #列出所有环境变量
    HOSTNAME=pc05.benet.com
    SHELL=/bin/bash
    HOME=/root
    LOGNAM=root
    .. ..


    2.

    echo $USER $HOME SHELL
    zhangsan /root SHELL
    
    echo $LANG 
    zh_CN.UTF-8

    其他特殊变量:
    由系统或脚本操控,不可直接赋值:
    $?:前一条命令的状态值,0为正常、非0异常
    $0:脚本自身的程序名或路径
    $1-$9:第一-第九个位置命令的参数
    $* :命令行的所有位置参数的内容

    $#:命令行的位置参数个数


    例子
    1.
    mkdir  /mulua
    echo $?
    0
    
    mkdir /mulu/a
    mkdir:无法创建目录 “/mulu/a”:没有那个文件或目录
    echo $?
    1   

    2.

    cat test.sh
    #!/bin/bash
    echo “本程序名:$0”
    echo "执行时一共输入$#个位置参数"
    echo “其中第一个参数是:$1”
    echo “所有参数如下:$*”
    
    ./test.sh  Hello Everyday!

     

    本程序名:./test.sh
    执行时一共输入2个位置参数
    其中第一个参数是:Helo
    所有参数如下:Hello Everyday!

    四、数值运算及处理

    1.整数运算操作:
    使用expr命令,计算表达式
    格式:expr 数值1 操作符 数值2

    使用$[]表达式,算式提换
    格式:$[数值1 操作符 数值2]

    例子:
    1.
    expr 45+21
    66
    expr 45-21
    23
    expr 45*21  #shell 中 把* 当成通配符,所以应该转义下
    945
    expr 45/21
    2
    expr 45%21
    3
    X=45;Y=21;expr $X-$Y
    24

    2.
    echo $[45+21] 
    66
    echo $[45*21]
    945
    
    X=45;Y=21;echo $[X-Y]
    24

    2.几个数值处理技巧
    变量的递更处理
    格式:let 变量名++、 let变量名--

    使用随机数
    RANDOM 变量

    生成数字序列
    格式:seq 首数 末数、 seq 首数 增量 末数

    例子:
    1.
    X=45;Y=21
    let X++;echo $X
    46
    let Y--;echo $Y
    20 
    
    let X+=2;echo $X 
    48

    2.
    echo $RANDOM      #RANDOM 变量的取值范围为0-32767 
    4411
    echo $RANDOM
    26911
    
    
    echo $[RANDOM%100]
    54
    echo $[RANDOM%100]
    83
    
    3.
    seq 3  #第一个数是从1 开始的 1 可以省略 
    1
    2
    3 
    
    seq 3 5
    3 
    4 
    5 
    
    seq   3  2 10 
    3 
    5  
    7 
    9 


    小数运行操作:
    将表达式给bc命令处理

    例子:
    echo “45.67-21” | bc
    24.62
    
    echo "scale=4;10/3" | bc #通过scale来约束小数位
    3.3333



  • 相关阅读:
    [滤镜]的firefox兼容问题
    软件编程中的21条法则
    程序员!你应该读别人的心得,但是一定要自己注解
    致橡树——舒婷
    高级动物
    终于把网站最后一个模块了结了
    终于解决了网站程序中的问题
    北京杂种
    博客园驻小窝
    Eval函数
  • 原文地址:https://www.cnblogs.com/bigdata1024/p/8387453.html
Copyright © 2011-2022 走看看