zoukankan      html  css  js  c++  java
  • shell编程基础

         Shell编程用途广泛,不管是做运维的还是做数据挖掘模型,日常的一些工作中都能用到它,如定时跑模型,取数据等等。在网易云课堂中发现北大青鸟的Linux Shell脚本应用课程,11个短视频,讲的很基础,例子也举的很多,很适合入门,本文作为一个课堂记录了,详细视频可以观看官网的视频,地址是http://study.163.com/course/courseMain.htm?courseId=306001#/courseMain,下图是视频所要讲的内容。

    一 初始shell
    1,什么是shell?介于内核跟用户之间的解释程序,命令解释器,翻译官
    2,什么是脚本?一类使用特定语言,按预设顺序执行的文件,批处理、宏解释性程序(python,ruby,js,php,shell,asp)
    3,创建第一个shell脚本?
       命令行:
       useradd zhangsan
       passwd zhangsan
       shell脚本:
       #!/bin/bash
       useradd zhangsan
       echo 123456 | passwd --stdin zhangsan
    4,执行shell脚本?
       1) chmod +x ***.sh
             ./***.sh
       2) sh ***.sh
       3) source ***.sh
     
    二 组合命令
    find /etc -name "*.conf" -type f
    在/etc文件下下找后缀为.conf文件,输出打印在控制台上
    find /etc -name "*.conf" -type f | wc -l
    加一个 | 管道命令 后面接着wc -l之后 ,这样会执行完前一个命令,紧接着执行第二个命令,就会显示在/etc文件目录下,后缀为.conf文件的个数
     
     
     
    逻辑关系
    与(&&),或(||),顺序执行(;)
    echo "萝卜" && echo "青菜"
    输出:萝卜
               青菜
    echo "萝卜" || echo "青菜"
    输出:萝卜
     
    三 变量
     
    变量基本操作
     
    定义及赋值:变量名=变量值           title=beida
    引用变量:$变量名,${变量名}     echo $title 输出 “beida”
    双引号:允许引用、转义   echo  "$title"  输出 beida
    单引号:禁止引用、转义    echo  '$title'  输出  $title
    反撇号:echo `uname -r` 或者 DATE=`date -d '1 days ago' +"%Y-%m-%d"` ; ` `跟$()一样的功能
    下图是运行结果
     
    $?:表示前一条命令的状态,0正常,非0异常
    $0:脚本自身的程序名
    $1-$9:第1-第9个位置参数
    $*:命令行的所有位置参数的内容
    $#:命令行的位置参数个数
     
    例子:
    例子:
     
    四 数值运算及处理
     
    变整数运算操作
    格式1:expr 数值1 操作符 数值2
    格式2:$[数值1 操作符 数值2]
    例子:注意乘号的表达式,*在shell里面是通配符,要用转义
    例子:
     
     
    几个数值处理技巧
    变量递增 :let 变量名++、 let 变量名--
    例子:
     
    使用随机数 :RANDOM 变量    (0-32767)
     
    例子:
     
    生成数字序列:seq 首数 末数、seq 首数 增量 末数   跟R语言的操作还不一样(a<- seq(首数,末数,增量))
    例子:seq 3默认从1开始,3为末数
     
    小数运算操作
    五 字符串处理
     
    子串截取操作
    路径分割:dirname 命令 、basename命令
    例子:
     
    使用expr命令:expr substr $var1 起始位置 截取长度
    例子:
     
    使用${var1:起始位置:截取长度}
    例子:
     
    字符串替换操作
    例子:/old/new 把字符串第一个old换成new,//old/new 把字符串所有的old换成new
     
    使用随机字符串
    例子:
     
    六 条件测试
     
    测试操作规范
    格式1:test 条件表达式
    格式2:[条件表达式]
    [条件表达式] && echo yes
     
    例子:可以看到/etc/grub 不是文件或目录,所以[ -d "/etc/grub" ] 是错误的。
     
    文件状态的检测
    -e:目标是否存在;-d:是否是目录;-f:是否是文件
    例子:
    例子中要注意[跟-f之间有空格的
    例子:
     
    整数值比较、字符串匹配
     
     
     
    例子:
     
     
    七 使用if判断结构
    程序流控制
    单分枝、双分支的if应用
    单分支
    if 条件测试
       then 命令序列
    fi
    例子:
     
    双分支
    if 条件测试
       then 命令序列1
       else  命令序列2
    fi
    例子:
     
    多重分值的if应用
     
    双分支
    if 条件测试
       then 命令序列1
    elif  条件测试
       then 命令序列2
    .....
    else 命令序列n
    fi
     
    例子:
     
    八 使用for循环
     
    for语句结构
    格式: for 变量名 in 取值列表
                do 
                      命令序列
                 done
    基本用法示范
    例子:
     
    例子:
     
     
    案例实战
    例子:
    例子:
     
     
     
    九 使用case分支
     
    case语句结构
    case 变量值 in
    模式1)
           命令序列1
           ;;
    模式2)
           命令序列2
           ;;
    .....
    *)
            默认命令序列
    esac
     由于在shell里面分号(;)算是命令分隔符,所以case 结构里面用两个分号(;;)
    基本用法示范
    例子:
     
    案例实战
    例子:
     
    例子:
     
    十 awk文本处理工具
     
    关于文本处理
    shell输出是文本
    非交互式处理方式:1)重定向、管道、命令替换;2)head、more、cut、tr;3)grep、awk、sed
     
    awk基本命令格式
    awk '模式 {操作}' 文件1 文件2
    awk 'NR==1 {print}' /etc/hosts  #'第一行 {打印}'
     
     
    常见用法示例
    例子:准备文件
    按行号输出文本
    使用比较运算
    使用正则运算
    指定输出
     
    十一 sed文本处理工具
     
    sed基本用法
    语法格式:
    sed '编辑指令' 文件1 文件2 ...
    sed -n '编辑指令' 文件1 文件2 ...
    sed -i '编辑指令' 文件1 文件2 ...
     
    编辑指令的写法
    格式:[地址1[,地址2]] 操作类型
    多条指令之间以分号隔开
    例如 sed -n '3p;5p' /etc/hosts
     

    输出文本
    例子:准备
    隔行输出文本
    注释: 先p后n 先打印一行,然后忽略一行,接着循环。。
     
    正则操作
    注释:'/w2k8/,$p'   #首先查找包含w2k8的首行,$p是最后一行
     
    删除文本
    删除不符合条件文本 !d表示 不删除
    替换文本第3,4行的hunter 替换成BADBOY 后面的/g 是所有的包含hunter
    ter换成空串
  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/kobedeshow/p/3572280.html
Copyright © 2011-2022 走看看