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

    什么是shell

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

    shell对话方式

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

    非交互式:shell脚本

    为什么使用shell编程!

    shell编程是实现linix、UNIX系统管理及自动化运维必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员的工作效率,减少不必要的重复时间

    变量

    • 普通变量(局部变量)
      ip = 192.168.22.205
      echo $ip
    
    • 环境变量(全局变量)

      大写、系统定义的,在大部分地方可以使用

    • 特殊变量

    $1 $2 $数字   $后数字是几代表shell脚本第几个参数
    $#           shell脚本中参数的个数、判断脚本的参数个数
    $?            上一个命令的执行结果(返回值)0 执行正确 1相反
    $0            脚本文件名  
    

    shell脚本的书写规范

    • 脚本一般存放在/server/scripts/中

    • 脚本编辑使用vim

    • 在执行bash脚本的时候,一般会根据"#!"后的解释器来确定该用那个程序解释这个脚本

    • 脚本文件名一般以.sh结尾

    数学计算方法

    # awk -v 变量=赋值   变量名称自己定义
    awk 'BEGIN{print 1/2}'
    

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

    #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}'
    
    执行脚本
    # sh cal.sh
    

    定义特殊变量,通过命令行传递参数方式

    # vim cal.sh
    #!/bin/bash
    n1=$1
    n2=$2
    awk -vnum1=$1 -vnum2=$2 '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}'
    
    执行脚本
    # sh cal.sh 10 20 后面要加上两个参数,参数之前加空格
    

    read交互式

    • read交互式赋予变量内容

    • read -p “提示信息”变量,变量名字,执行结束会把输入的信息存放在变量中

    # read -p "input num1:"n1
    imput num1:sgs
    #echo $n1
    sgs
    

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

    #vim cal.read.sh
    #!/bin/bash
    read -p "input num1,num2:"n1 n2
    awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1+num2}'
    awk -vnum1=$1 -vnum2=$n2'BEGIN{printnum1-num2}'
    awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1*num2}'
    awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1/num2}'
    
    执行脚本
    # sh cal.read.sh
    input num1,num2:10 20   #随便输入两个数值,中间要有空格
    

    条件表达式if

    [ -d/data ] 判断目录是否存在

    [ -f/data ] 判断文件是否存在

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

    • 比大小
    -eq       equal                ==
    -ne       not equal            !=
    -gt       great than           >
    -ge       great equal          >=
    -lt       less than            <
    -le       less equal           <=
    
    eg:[ 10 -eq 10]
    
    • if单分支格式脚本
    格式:if[条件];then
    		命令
        fi
        
    #!/bin/bash
    if [ $# -ne 2];then
        echo "输入两个数字"
    fi
    
    • if双分支格式脚本
    格式:if[条件];then
    	命令
          else
        命令
        fi
        
    comp.sh输入两个数字,如果n1大于n2输出n1>n2,如果n1不大于n2输出n1<=n2
    
    #!/bin/bash
    n1=$1
    n2=$2
    
    if [ $n1 -gt $2];then
    	echo "$n1 > $n2"
    else
    	echo "$n1 <= $n2"
    fi
    
    • case选择分支
    case $变量名 in
    '值1')
    代码
    ;;
    '值2')
    代码
    ;;
    *)
    代码
    ;;
    esac
    
    #!/bin/bash
    read -p "press some key,then press return:"KEY
    case $KEY in
    [a-z]|[A-Z]
    echo "it's a letter"
    ;;
    [0-9])
    echo "it's a digit"
    ;;
    echo "it's function keys,Spacebar or other ksys"
    
    • for循环
    for 变量 in 值1 值2 值3
    do
    	代码
    done
    
    
    for 变量 `命令`
      do
        程序块
      do done
    
    
    for((初始值;循环控制;变量变化))
     do
        程序块
     done
    
    #输出3次uptime
    
    #!/bin/bash
    for i in 1,2,3,4,5
     do
        echo "$i-->$(uptime)"
     done
    
    #批量解压缩当前文件夹下所有的.tar.gz文件
    
    #!/bin/bash
    for i in `ls./*.tar.gz`
     do
        tar -zxvf $i >/dev/null
     done
    
    #求1~100的和
     #!/bin/bash
      sum=0     #变量赋值的时候,=两边绝对不能有空格
      for ((i=1;i<=100;i++))
        do
        sum=$(($sum+$i))
        done
       echo "1+2+3+...+100=$100"
    
    • while循环
    while [条件]
    do
    	代码
    done
    
    #!/bin/bash
    a=1
    while [ $a -le 5 ]
    do
    	echo $a
        ((a++))
    done
    
    #!/bin/bash
    a=1
    while((a<=5))
    do
    	echo $a
        ((a++))
    done
    
  • 相关阅读:
    【HICP Gaussdb】数据库 数据库管理( 导入 导出 闪回 调优 wsr报告 ) -13
    【Flask项目】 python学习第一章
    【Flask项目】 python学习第一章
    【HICP Gaussdb】数据库 数据库管理( 备份 导入 导出 ) -12
    【系统级配置】/etc/sysctl.conf
    【Flask项目】 python学习第一章
    【HICP Gaussdb】数据库 数据库管理( 数据库安全 账户 日志管理)-11
    【Git】 python学习第一章
    【HICP Gaussdb】数据库 数据库管理(并发 锁 数据库安全)-10
    【HCIA Gauss】学习汇总-数据库管理(三范式 GAUSSDB100)-8
  • 原文地址:https://www.cnblogs.com/lzss/p/12188850.html
Copyright © 2011-2022 走看看