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

    第1章 shell基础

    1.1 什么是shell

    Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户。

    1.1.1 shell对话方式

    交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应,一问一答的方式

    非交互式:shell脚本 

    1.2 为什么使用shell编程

    作为一个合格的运维人员必须掌握一种或一种以上的脚本语言,shell编程则是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员的工作效率,减少不必要的重复工作时间。

    1.3 系统中的shell

    linux系统默认shell是bash

    [root@zeq ~]# cat /etc/shells
    
    /bin/sh
    
    /bin/bash
    
    /sbin/nologin
    
    /bin/dash
    
    /bin/tcsh
    
    /bin/csh  

    第2章 变量

    2.1 什么是变量

    x+y=20     x=10  y=? 未知数(变量)

    一个未知数,随时可以变化的量叫变量

    2.2 变量的分类

    2.2.1 普通变量(局部变量)

    只能在当前环境下使用,可以通过export命令临时把普通变量变为环境变量使用

    [root@zeq ~]# ip=10.0.0.201     给变量赋值(把数据存放到变量中)
    
    [root@zeq ~]# echo $ip
    
    10.0.0.201

    2.2.2 环境变量(全局变量)

    1.大写

    2.系统定义的

    3.在大部分地方可以使用

    2.2.3 特殊变量

    $1   $2   $数字        $后数字是几代表shell脚本第几个参数

    $#                           shell脚本中参数的个数

                                   判断脚本的参数个数

    $?                          上一个命令的执行结果(返回值)

                                  0             执行正确

                                  非0           执行失败

    $0                          脚本文件名

    第3章 shell脚本的书写规范

    3.1.1 脚本存放位置

    为了防止脚本乱放,统一存放在/server/scripts/中

    创建目录

    [root@zeq ~]# mkdir -p /server/scripts/
    
    [root@zeq ~]# cd /server/scripts/

    3.1.2 脚本编辑使用vim

    3.1.3 选择解释器

    在执行bash脚本的时候,内核会根据"#!"后的解释器来确定该用那个程序解释这个脚本中的内容。

    [root@zeq ~]# vim /server/scripts/cal.sh    
    
    #!/bin/bash

    3.1.4 文件名书写

    文件名称一定要有意义,方便看出是干嘛用的脚本,并且以.sh结尾

    3.1.5 书写脚本的规范和习惯

    1、  放在统一目录下,方便查找

    2、  书写脚本要用vim编辑,

      批量删除

      批量增加

      1.进入批量编辑模式(可视块)esc下ctrl+v

      2.选择 批量增加的范围

      3.按 shift + i 进行修改

      4.按esc 退出等等

    3、 脚本文件名称以.sh结束

    4、 脚本开头一定要指定解释器

    5、 脚本中#代表注释,#后的内容不会执行,不用的命令等可以用#注释掉,脚本中尽量不要出现中文注释以免出现因字符集不同产生乱码

    6、 代码符号书写规范

         1.成对的符号一定要都写出来再添加内容,避免遗忘漏写;如 "" '' []等

         2.流程控制语句一次书写完,再添加内容;(if 条件 ; then  内容;fi)

           3.书写的代码符号都是英文输入法格式

           4.通过缩进让代码易读

    第4章 shell练习

    书写一个计算器脚本

    4.1 数字计算方法

    [root@zeq ~]# awk  'BEGIN{print 1/2}'
    
    0.5

    4.1.1 命令行中的变量 放在awk中使用

    awk -v变量=赋值       变量名称自己定义

    [root@zeq ~]# awk -vnum1=10  -vnum2=20 'BEGIN{print num1/num2 }'    这里变量为num1和num2
    
    0.5

    4.1.2 书写脚本计算10与20的加减乘除

    [root@zeq]# vim cal.sh
    
    #!/bin/bash
    
     
    
    n1=10
    
    n2=20
    
     
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

    执行脚本

    [root@zeq /server/scripts]# sh cal.sh
    
    30
    
    -10
    
    200
    
    0.5

    4.1.3 定义特殊变量 通过命令行传递参数方式进行计算

    [root@zeq /server/scripts]# vim  cal.sh
    
    #!/bin/bash
    
     
    
    n1=$1          第一个参数
    
    n2=$2          第二个参数
    
     
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'
     执行脚本
    [root@zeq /server/scripts]# sh cal.sh 10 20       后面要跟上两个参数才能执行成功,参数之前加空格
    
    30
    
    -10
    
    200
    
    0.5

    4.2 通过read 交互式

    read交互式赋予变量内容

    read -p "提示信息:"  变量名字

    read -p "提示信息:"  p

    执行之后会把输入的信息存放在变量中

    [root@zeq /server/scripts]# read -p "input num1:" n1
    
    input num1:zeq
    
    [root@zeq /server/scripts]# echo $n1
    
    zeq

    4.2.1 通过read命令实现 n1 n2赋值 进行计算

    [root@zeq /server/scripts]# vim cal.read.sh
    
    #!/bin/bash
    
     
    
    read -p "input num1,num2:" n1 n2     一条命令直接定义两个变量
    
     
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

    执行脚本

    [root@zeq /server/scripts]# sh cal.read.sh
    
    input num1,num2:10 20         随便输入两个数值,中间要有空格
    
    30
    
    -10
    
    200
    
    0.5 

    4.3 条件表达式  if

    4.3.1 判断目录、文件是否存在

    [ -d /data ]

    [ -f /data ]          

    注意格式:[空格-f /data空格]   []里面两端必须有空格,中间写内容

    [root@zeq /server/scripts]# [ -d /data ]
    
    [root@zeq /server/scripts]# echo $?                 $?特殊变量,0代表执行正确,非0执行失败
    
    0
    
    [root@zeq /server/scripts]# [ -d /data123 ]
    
    [root@zeq /server/scripts]# echo $?
    
    1

    4.3.2 比大小

    -eq         equal         ==
    
    -ne     not equal         !=
    
    -gt     great than        >
    
    -ge     great equal       >=
    
    -lt     less  than        <
    
    -le     less  equal       <=

    4.3.3 比大小举例

    [root@zeq /server/scripts]# [ 10 -eq 10 ]
    
    [root@zeq /server/scripts]# echo $?                
    
    0
    
    [root@zeq /server/scripts]# [ 10 -gt 10 ]
    
    [root@zeq /server/scripts]# echo $?
    
    1
    
    [root@zeq /server/scripts]# [ 10 -ge 10 ]
    
    [root@zeq /server/scripts]# echo $?
    
    0

    4.3.4 if单分支格式脚本

    格式: if [ 条件 ];then

            命令

    fi

    1、判断脚本的参数个数,如果不是2则提示请输入两个数字

    [root@zeq /server/scripts]# cat pan.sh
    
    #!/bin/bash
    
     
    
    if [ $# -ne 2 ];then
    
       echo "输入两个数字"
    
    fi

    2、 给计算器(参数传递)增加一个条件

    判断脚本的参数个数,

    如果不是2则

    提示请输入两个数字

    [root@zeq /server/scripts]# cat cal.sh
    
    #!/bin/bash
    
     
    
    n1=$1
    
    n2=$2
    
     
    
    if [ $# -ne 2 ];then
    
       echo "USAGE: $0 num1 num2"                                  $0文件名
    
       exit                                                        exit  退出的意思
    
    fi
    
     
    
     
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'
    
    awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

    3、执行脚本

    [root@zeq /server/scripts]# sh  cal.sh
    
    USAGE: cal.sh num1 num2
    
    [root@zeq /server/scripts]# sh  cal.sh 120 20
    
    140
    
    100
    
    2400
    
    6

    4.3.5 if双分支格式脚本

    格式: if [ 条件 ];then

            命令

                 else

              命令

    fi

    1、comp.sh输入两个数字:

     1.如果n1大于n2

     输出 n1 > n2

     2.如果n1不大于n2

     输出 n1 <= n2

    [root@zeq /server/scripts]# cat  comp.sh
    
    #!/bin/bash
    
     
    
    n1=$1
    
    n2=$2
    
     
    
    if [ $n1 -gt $n2 ];then
    
       echo "$n1 > $n2"
    
    else
    
       echo "$n1 <= $n2"
    
    fi

    2、执行脚本

    [root@zeq /server/scripts]# sh comp.sh 10 20
    
    10 <= 20
    
    [root@zeq /server/scripts]# sh comp.sh 10 10
    
    10 <= 10
    
    [root@zeq /server/scripts]# sh comp.sh 100 10
    
    100 > 10
  • 相关阅读:
    BFGS(1)
    局部加权之线性回归(1)
    遗传算法(1)
    Python扩展(Cython混编)
    梯度下降算法(1)
    Python矩阵作图库matplotlib的初级使用
    搭建FTP服务器与客户端(1)
    maven常见小问题整理
    git常用命令问题整理
    maven常用命令整理
  • 原文地址:https://www.cnblogs.com/zeq912/p/9501915.html
Copyright © 2011-2022 走看看