zoukankan      html  css  js  c++  java
  • shell脚本

    shell脚本

    shell的介绍

    Shell是一种脚本语言,又是一种命令语言。通俗来讲,Shell脚本就是一系列命令的集合,可以在Unix/linux上面
    直接使用,并且直接调用大量系统内部的功能来解释执行程序,把一些重复性工作交给shell做,来实现自动化运维。Shell 虽
    然没有C/C++、Java、Python等强大,但也支持了基本的编程元素。例如:iffor、while等循环,还有变量、数组、字符
    串、注释、加减乘除逻辑运算等。运维工程师、网络管理员、程序开发等人员应该把shell进行熟练的掌握。

    shell的应用场景

    主要用来开发一些实用的、自动化运维的脚本,而不是用来开发具有复杂业务逻辑的中大型软件。
    监控linux系统环境的使用情况;
    数据的处理,如日志的切割、分析、统计等;
    与数据库的交互,如对数据库进行增,删,改,查等操作;
    监控进程,自动化启停服务进程;
    完成一些重复性的工作,如创建多个新用户;
    在服务器集群配置文件

    远程连接软件

    SecureCRT、Xshell、putty
    Xshell
    链接:https://pan.baidu.com/s/1sHGiNiuGbK2nLkSlur-vnQ
    提取码:6cae
    SecureCRT
    链接:https://pan.baidu.com/s/12A7vycGDm2vZaER_VuELxg 提取码:ihg4

    linux的基本操作命令(常用命令)

     linux之vi编辑器

    单独整理,详情地址:
    https://www.cnblogs.com/fujingtao5470/p/12715152.html

    linux文件权限

    文件权限(- rw- r-- r-- )和 目录权限(d rw- r-- r--) 
    都是可以分三列:每三个为一列,分别是所有者(owner),所属组(group),其他(others) 
    rwx说明:
     r:读的权限用4表示 w:写的权限用2表示 x:执行权限用1表示
    
    7:表示rwx
    6:表示rw
    5:表示rx
    3:表示wx

    shell脚本基本编写与执行

    解释器:是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行。shell不一定得有解释器(shell脚本不加解释器,一般情况也可以用,但是容易出现问题,强烈建议shell脚本中标明解释器)
    常见解释器:
    # !/bin/bash(linux默认解释器) # !/bin/ksh # !/bin/bsh # !/bin/sh
    一般放在shell脚本的第一行,进行定义解释器。

    shell脚本书写过程中: # 表示注释,但是 #! 表示定义解释器(第一行)

    1.书写第一个shell脚本:

    #!/bin/bash
    #注释脚本功能说明
    #作者及日期
    echo 'Hello World !!!'

    保存为shell.sh文件

    2.如果脚本在本地通过CRT上传至linux服务器

    3.通过远程工具(CRT)执行shell.sh的方法

    方法1:sh shell.sh 或  bash shell.sh  或  source shell.sh (前提是shell.sh文件有读的权限)
    方法2:添加执行权限 chmod u+x shell.sh 或 chmod +x shell.sh(因为自己编写的shell脚本默认没有执行权限)   执行shell脚本: ./shell.sh
    建议使用 sh shell.sh 或  ./shell.sh

     shell脚本中的常见变量

    1.
    变量赋值:a = 3 输出变量a的值:echo $a 或 echo ${b}
    2.
    echo $? :如果输出的是0,说明此命令(echo $?)之前的上一条命令正确执行,没有异常错误;如果输出的不是0,说明此命令(echo $?)的上一条命令执行时出现异常错误。

    3.
    $0 :输出脚本的文件名称
    $n :n表示1-任意整数,表示输出执行脚本时的第n个参数的值是多少
    $# :输出执行脚本时一共输入参数的总个数
    $* :输出执行脚本时输入的所有参数

    示例说明:此处用shell Scrip 进行演示,这是一个shell脚本,文件内容如下,文件名为shell01.sh
    
    

      执行脚本:用sh ./shell01.sh 命令执行脚本,同时后面传输15个参数,分别是:1-15

      

      执行结果:

      

     shell脚本中的常见变量

    1. >      :追加信息,但是会覆盖原有的内容  示例:  cat >  demo.txt  然后输入你要录入的内容,但是你的内容会将demo.txt的原有内容覆盖掉     Ctrl+C 退出
    2. >> :追加信息,只会在原有内容的后面追加你要录入的内容 示例: cat >> demo.txt 然后输入你要录入的内容,你的内容会在原有内容的后面进行追加(类似于append) Ctrl+C 退出
    3. ; :可以同时书写多条命令并执行 示例 cat demo.txt;ls -lrt
    4. | :管道符 示例: cat demo.txt | grep xxx 示例说明:通过cat命令将demo.txt内容读取出来,并交由grep命令进行检索含有xxx字符的数据
    5. && :与,符号前后书写命令 当符号前面的命令执行成功后,后面的命令才能执行,否则,后面的命令不执行(类似java的按位与) cat demo.txt && ls
    6. || :或,符号前后书写命令 当符号前面的命令执行成功后,后面的命令不执行,否则,后面的命令才能执行(类似Java的按位或) cat demo.xxx || ls
    7. "" :如果其中含有变量的话,可以输出变量的值
    8. '' :如果其中含有变量的话,只能输出变量名称,不会输出变量的值
    "" 与 '' 的区别
     

     9.  ``    :可以输出命令执行的结果  示例: echo `date`  示例说明 因为date是linux命令,放在``中 ,可以执行并打印出当前时间的结果

     10. 2/dev/null   :错误输出到无底洞  ,前面书写命令,如果命令执行的结果是正确的,则直接输出执行结果,如果命令执行是错误的,则不会输出错误信息

     11. 1/dev/null   :正常输出到无底洞  ,前面书写命令,如果命令执行的结果是正确的,则不会输出执行结果,如果命令执行是错误的,则会输出错误信息

     shell脚本的常见运算符

    整数
    加:
      expr 2 + 3  expr $a + $b
      echo $[2 + 3]  echo $[a + b]
      echo $((2 + 3))  echo $((a + b))
    减:
      expr 2 - 3  expr $a - $b
      echo $[2 - 3]  echo $[a - b]
      echo $((2 - 3))  echo $((a - b))
    乘:
      expr 2 * 3  expr $a * $b
      echo $[2 * 3]  echo $[a * b]
      echo $((2 * 3))  echo $((a * b))
    除:
      expr 2 / 3  expr $a / $b
      echo $[2 / 3]  echo $[a / b]
      echo $((2 / 3))  echo $((a / b))
    余:
      expr 2 % 3  expr $a % $b
      echo $[2 % 3]  echo $[a % b]
      echo $((2 % 3))  echo $((a % b))

    含有小数的
    bc:
      bc是Linux自带的计算器
      输入bc命令,直接输入运算,几个得到结果 Ctrl+C退出

    shell脚本中如何使用:
      echo "3.5+6.5" | bc        a=3.5;b=6.5;echo "$a+$b" | bc

    保留xx位小数:可以用scale命令 示例: scale = 2

      注意:
        scale只对乘幂/除法/取余 有效,对加/减 无效,加减可以通过对运算结果 乘1或除1 的方式来保留指定小数位,示例:echo "scale=2;(3.5+6.5)/1" | bc
        整数位如果是零:echo "scale=2;(0.2+0.3)/1" | bc  输出结果是  .50 而不是 0.50
        
    
    

     shell脚本的常见条件判断

    [ 条件判断表达式 ]
    一般情况下可以和 && || 进行配合使用 如果true && 如果false ||

    文件/文件夹或路径的判断
      -e  目标是否存在(exist)  [ -e demo.sh ] && echo '存在' [ -e demoxx.sh ] || echo '不存在'
      -d  是否是路径或文件夹(directory)  [ -d /test ] && echo '路径存在'
      -f  是否是文件(file)  [ -f demo.sh ] && echo '是文件'
    权限的判断
      -r  是否有读取权限(read)  [ -r shell.sh ] && echo '有读取的权限'
      -w  是否有写入权限(write)  [ -w shell.sh ] && echo '有写入的权限'
      -x  是否有执行权限(excute)  [ -x shell.sh ] || echo '没有执行的权限'
    整数型(int)的判断
      -eq  等于(equal)  [ 1eq2 ] && echo '1不等于2'  a=1;b=2;[ aeqb ] && echo 'a不等于b'
      -ne  不同于(not equal)
      -gt  大于(greater than)
      -lt  小于(lesser than)
      -ge  大于等于(greater or equal)
      -le  小于等于(lesser or equal)
    小数型(浮点型)的判断
      利用bc计算进行判断 bc 计算机支持浮点型判断 如果比较正确返回1,否则返回0,利用这一点,我们实现在shell脚本中对浮点型进行判断
      示例: [ `echo "7.2 < 8"|bc` -eq 1 ] && echo 'ture'
    字符串的判断
      =   相等  [ 'a'='a' ] && echo '等于'
      !=  不相等  [ 'a'='b' ] && echo '不等于'




    panduan.sh(比较两个整数的大小的脚本)
      

    #!/bin/bash
    #参数1与参数2做比较
    #by FJT create by 2020/04/19
    if [ $1 -eq $2 ]
    then
    echo "$1等于$2"
    else
    echo "$1不等于$2"
    fi

    createFile.sh(创建文件的脚本)

    #!/bin/bash
    #创建文件或文件夹的shellscript
    #by FJT 2020/04/19
    touch $1
    if [ $? -eq 0 ];then
    echo "$1 创建成功!!!"
    else
    echo "$1 创建失败!!!!!"
    fi

     shell脚本的输入/输出(特效效果)

    1.输入命令read:  shell script 中的语法:read -p "请输入密码:" -s -t "5" (类似于html中的input)  read后携带的常用参数主要有:

       -p  : 提示信息,默认不支持"
    "换行 (read -p "请输入密码")
       -s  : 隐藏输入的内容,例如输入密码的时候 (read -s)
       -t  : 设置等待时间,超时会自动退出read输入 ,秒(read -t "5")
       -n  : 设置读取字符的个数,触发临界值会自动执行read输入 (read -n "8")
      注意:  
        脚本书写:read.sh,说明 param即传入的参数,这个变量可以随意定义,如pass,p......
        脚本中换行操作:echo -e " "

      
    第一种脚本输入方式(read)
     

    #!/bin/bash
    #功能描述:用来测试输入命令read
    #by fjt 2020-04-20
    read -p "请输入密码:" -s -t 5 -n 7 param

    echo -e " "
    echo "$param"

    第二种脚本输入方式(read)

    #!/bin/bash
    #功能描述,输入命令read的第二种方式
    #by fjt 2020-04-20
    echo "请输入用户名:"
    read usr
    echo -e " "
    echo "您输入的用户名是:$usr"

    第三种脚本输入方式($n):换行操作(echo -e "
    ")
    panduan.sh(比较两个整数的大小的脚本)

    #!/bin/bash
    #参数1与参数2做比较
    #by FJT create by 2020/04/19
    if [ $1 -eq $2 ]
    then
    echo "$1等于$2"
    else
    echo "$1不等于$2"
    fi

    2.语法: echo -e "33[字背景颜色;字体颜色;特效字符串33[关闭属性"

    	#字体色范围:30-37
    		echo -e "33[30m 黑色字 33[0m"
    		echo -e "33[31m 红色字 33[0m"
    		echo -e "33[32m 绿色字 33[0m"
    		echo -e "33[33m 黄色字 33[0m"
    		echo -e "33[34m 蓝色字 33[0m"
    		echo -e "33[35m 紫色字 33[0m"
    		echo -e "33[36m 天蓝字 33[0m"
    		echo -e "33[37m 白色字 33[0m"
    	#字背景颜色范围:40-47
    		echo -e "33[40;37m 黑底白字 33[0m"
    		echo -e "33[41;30m 红底黑字 33[0m"
    		echo -e "33[42;34m 绿底蓝字 33[0m"
    		echo -e "33[43;34m 黄底蓝字 33[0m"
    		echo -e "33[44;30m 蓝底黑字 33[0m"
    		echo -e "33[45;30m 紫底黑字 33[0m"
    		echo -e "33[46;30m 天蓝底黑字 33[0m"
    		echo -e "33[47;34m 白底蓝字 33[0m"
    	# 特效范围
    		echo -e "33[0m 无任何特效 33[0m"
    		echo -e "33[1m 高亮度 33[0m"
    		echo -e "33[4m 下划线 33[0m"
    		echo -e "33[5m 闪烁 33[0m"

      

    处理海量数据常用命令

    grep、cut、awk、sed 常用于查找日志、数据、输出结果等等,并对我们想要的数据进行提取,
    通常grep、sed命令是对行进行提取,cut、awk是对列进行提取。

    处理海量数据值grep

    使用场景:grep应用场景:通常对数据进行 行的提取。
    使用语法:grep [选项]...[内容]...[file]
    常用的选项如下:
    	-v 	#对内容进行取反提取
    
    	-n 	#对提取的内容显示行号
    
    	-w 	#精确匹配
    
    	-i 	#忽略大小写
    
    	^ 	#匹配开头行首
    
    	-E 	#正则匹配

    处理海量数据值cut

    应用场景:通常对数据进行列的提取。
    使用语法:语法:cut [选项]...[file]
    常用语法如下:
                -d     #指定分割符
                -f  #指定截取区域
                -c  #以字符为单位进行分割
    
                注意:不加-d选项,默认为制表符,不是空格
                        /bin/bash         #代表可以登录的用户
                        /sbin/nologin    #代表不可以登录的用户
    
                -d与-f:
                eg:以':'为分隔符,截取出/etc/passwd的第一列跟第三列
                cut -d ':' -f 1,3 /etc/passwd
    
                eg:以':'为分隔符,截取出/etc/passwd的第一列到第三列
                cut -d ':' -f 1-3 /etc/passwd
    
                eg:以':'为分隔符,截取出/etc/passwd的第二列到最后一列
                cut -d ':' -f 2- /etc/passwd
    
                -c:
                eg:截取/etc/passwd文件从第二个字符到第九个字符
                cut -c 2-9 /etc/passwd
    eg:比如领导想叫你截取linux上面所有可登陆普通用户
    grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root
     
  • 相关阅读:
    【转载】写一个js库需要怎样的知识储备和技术程度?
    【数据库】【算法】从一串数据中获取符合某个条件的时间区间
    Tomcat中组件的生命周期管理(二)
    [Tomcat源码相关]Digester类的使用
    Tomcat启动过程源码分析五
    Tomcat启动过程源码分析六
    Tomcat启动过程源码分析四
    Tomcat启动过程源码分析三
    Tomcat启动过程源码分析二
    Tomcat启动过程源码分析一
  • 原文地址:https://www.cnblogs.com/fujingtao5470/p/12710654.html
Copyright © 2011-2022 走看看