zoukankan      html  css  js  c++  java
  • shell

                   Shell 脚本编程 -----编程范围与变量

    一.脚本文件名的结尾必须加.sh

    (1) 写脚本内容是开头必须加 #!/bin/bash

    (2) 执行脚本命令:bash yunjisuan.sh sh yunjisuan.sh (也可以 以绝对路径的方式执行脚本 /root/xxx/yunjisuan.sh   但前提必须点给yunjisuan.sh 脚本加x执行全限 chmod +x yunjisuan.sh)

    (3) 我们在写脚本的时候里面的命令行必须都是免交户的列如下图

     

    二.Shell脚本的意义:

      Shell脚本的意义在于,通过命令行解析的方式帮我们自动去执行我们设定好的命令代码。

      假如我们把脚本挂到定时任务里,那就是自动在某个没有人的时间里自动执行脚本里的命令代码(也就是自动化脚本)

      脚本虽然能帮我们自动执行,但是脚本的局限性是很大的,假如我们要去/根下清空某个目录,但没有这个目录,脚本也去执行,但它执行的是在根/下执行这条命令 /]#rm -rf * 就完了! 因此我们在写脚本 指定目标路径前加个命令test来判断有没有这个文件或目录(test -d 是判断目录  test -f 是判断文件)

    列如下图:

     

     

     我们也可以用[  ] 这个符号进行条件测试真jia

    列如下图

     

    [  ] 括号里面两边必须加空格判断数值时==号两边也要加空格,(这条命令的意思时xx的值对就数出0 错就输出1-gt grep than)是大于  -lt  (less than)是小于  ==两个等于是判断 eq是等于   !=就是取反不等于  -ge 是大于等于  -le是小于等于

     

           -z 判断字符串是否是空

     

    逻辑或只能出现一个在最右边,有了逻辑或后边就不能有逻辑与了,luo

    以上总结

     

    脚本交户形式

    (1)read “ ” 交户 模式 让用户输入

    列如下图:

     

     

    创建用户脚本

    #!/bin/bash

    User="yunjisuan"

    Passwd="123456"

    read -p "请输入用户名" user

    read -p "请输入密码" passwd

    [ $User -eq $user ] && echo "YOU ARE RIGHT" || echo YOU ARE WRONG

    [ $Passwd -eq $user ] && echo "YOU ARE RIGHT" || echo "YOU ARE WRONG"

     

      read -p”文本提示” num变量  让用户输入内容复值到num的变量里

    三.基本条件逻辑语:

       if [ 如果什么 ]

       then 那么,干啥

       elif 否则如果

       else 否则

       exit 强行终止

       if结束

      列如:

     

     

    yum 仓库脚本

    (1)移除光盘,再挂载

    (2)判断光盘挂载

    (3)挂载本地yum仓库脚本

    (4)判断一级目录、二级目录是否存在

    配置文件手动生成,避免之前被修改过(重定向或echo -e

     

     

    配置文件手动生成

    用脚本手动生成配置文件,一般用重定向

    输入重定向通过FOF标识(任意定义,但成对出现),将FOF之间的内容输入重定向到catcat再输出重定向给/etc/yum.repos.d/yum/repo文件

    shell脚本循环语句

    for 循环语句

      格式: for 变量名  in  取值列表

             do

    循环体

    done 结束

    列如:

     

    循环取值的过程:in后边是取值范围,in将后边的值一个一个负值给变量i,负值一次i就进入dodoen之间的循环体循环一次,循环完毕自动返回,让i去取下一个值,直到没有了整个结束。

     也可以已命令方式,但命令必须用反引号括起来优先执行,in在一个一个的去取值......在交给i 输出

     

      | xargs 是将root下的目录文件以横排显示也是将分行符 转换为空格

    (1)变种的for 循环

       1)格式:  for ((i=0;i<10;i++))

    do 双括号是支持c++语言i=0i

    echo $i       初始变量=0i<10是条件范围,i++就是

    doen                        i=i+1 没次输出完都执行i++直到超出

                               条件范围跳出循环,不加i<10条件就会无                     限输出

     

    格式二: h=0

             for  i in {1..10}

             do

                   echo $h

       let h++

             done

    自动找出本网段内存活的IP地址的脚本

    写法:

    一般都用ping -c 1  是只ping一次

     

    while脚本循环

    (1) 格式:

    while 条件

    do

    循环体(指令)

    done

    read -p “用户输入:” i   (也可以写i=0

    while [ $i -lt 10 ]     是条件为真继续循环条件为假跳出循环

    do                 while : 不写条件就是永招 无限循环

    echo $i

    let i++         let 是让shell 支持 i++

    done

      while循环主要是弥补for循环没有无限循环的格式用的

    Case语句

    用途:菜单;启动脚本

    case语句适合变量的值少,且为固定的数字或字符串集合。 系统服务启动脚本传参的判断多用case语句

    格式:

    case "字符串变量" in

        1

            指令1

            ;;

        2

            指令2

            ;;

        *)

            指令

    esac

    服务脚本框架

      vim case.sh  

    #!/bin/bash

    . /etc/init.d/functions

    case $1 in

            start)

                    action "服务开始启动"   /bin/true

                    ;;

            stop)

                    action "服务准备停止"   /bin/false

                    ;;

            restart)

                    action "服务准备停止"   /bin/true

                    action "服务来时启动"   /bin/true

                    ;;

            *)

                    echo "请输入正确参数"

                    ;;

    esac

    在当前脚本引用函数库(绝对路径)

    Function对应的是action “ ” 路径

    /bin/true 表示一个标志

     

     

    设置脚本配置启动级别

    (1)为脚本设置启动级别

    将脚本cp/etc/init.d/下,vim编辑/etc/init.d/cash.sh脚本

    在脚本的第二行加# chkconfig: 35 90 10

     

    (2)chkconfig中添加脚本

    # chkconfig --add case.sh

    # chkconfig --list case.sh

    (3)设置关闭cash.sh

    # chkconfig case.sh off

     

    shell 函数

    不论什么编程语言,基本只有三种编程方法

    1. 面向过程

    2. 面向对象

    3. 函数式编程

     这三种模式,并不是语法,而是我们如何去编写代码的方法论。

    shell这种语言里,只能支持面向过程这种编程方法。

    过程就是按照一定顺序进行代码的编写,不能跳步这就是过程。

    shell中,function表示函数(functionreturn可以不写)

    格式:

    function 函数名(){

    命令序列

    [return x]

    }

    函数名

    函数体只有被调用时才会启动,若要重复启动该函数,只需将函数名重复制一遍,复制几遍就启动几次

     

     

     

     

    源码编译示意

     

    四种循环控制语句break  contiue  exit  rotun

    exit 强行终止

     

     

    break达到条件时跳出当前循环,但不终止脚本,会进入当前循环以外的或下一个循环(break只跳出当前离它最近的内侧循环)

     

     

    continue 终止当前本次循环进入下次循环,直到循环完当前循环的条件,在跳出循环,当没有条件的时候会在当前无限循环

     

     

    rotun是用在函数里的作为函数的返回值,用于判断函数执行是否正确。和exit一样,如果函数里有循环碰到它也会跳出整个函数体,会从哪调用的函数就从哪继续

     

     

  • 相关阅读:
    base -2 Number——进制转换
    AtCoder Crackers——水题
    血色先锋队——bfs
    Atcoder---ID排序模拟结构体
    101. 对称二叉树
    100. 相同的树
    95. 不同的二叉搜索树 II
    96. 不同的二叉搜索树
    JavaWeb学习总结(五十)——文件上传和下载(转载)
    145. 二叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/yixin666/p/9899159.html
Copyright © 2011-2022 走看看