zoukankan      html  css  js  c++  java
  • Linux下Bash shell学习笔记

    原文地址: http://www.cnblogs.com/NickQ/p/8870423.html

    1、shell下没有变量类型和定义的概念。

    1. 变量直接使用不用定义
    2. 所有值都视为字符串。
    3. 在对变量取值都需要加$
    4. 行注释为 #
    • 在shell中,算术运算,执行加减除

    例如:

    	var1=5
    	var2=2
    	total=`expr $var1+$var2`
    

    $ 是取变量值运算符
    ` 是命令置换符,将expr (var1+)var2执行结果赋值给total
    expr 是做数学运算的命令

    • shell中,算术运算,执行乘

    例如:

    	var1=5
    	var2=2
    	total=`expr $var1 * $var2`
    
    * 在shell中为通配符。在此用作乘法需要转义  
     是转义命令符,因此 *表示乘法。  
    

    2、设置PATH

    PATH 是shell找寻命令的路径。如果执行的命令找不到,会报command not found错误。
    修改PATH:

    PATH = $PATH:/usr/temp

    3、shell脚本第一句应指明解释器

    一般第一句为: #!/bin/bash

    4、条件判断

    if 空格 [ 空格 条件1 空格 == 空格 条件二 ] 空格;空格then

    注意汉字指明的空格 == ; > [] 两边必须有空格

    例如:
    #!/bin/bash
    
    SYSTEM=`uname -s`
    
    if [ $SYSTEM == "Linux" ] ; then
        echo "Linux System"
    elif [ $SYSTEM == "FreeBSD" ] ; then
        echo "FreeBSD System"
    elif [ $SYSTEM == "Solaris" ] ; then
        echo "Solaris System"
    else
        echo "Unknow System"
    fi  
    

    判断符号

    1、字符串判断
    str1 = str2  当两个串有相同内容时为真 
    str1 != str2  当串str1和str2不等时为真 
    -n str1    当串的长度大于0时为真(串非空) 
    -z str1    当串的长度为0时为真(空串) 
    str1      当串str1为非空时为真
    
    2、数字的判断
    int1 -eq int2    两数相等为真 
    int1 -ne int2    两数不等为真 
    int1 -gt int2    int1大于int2为真 
    int1 -ge int2    int1大于等于int2为真 
    int1 -lt int2    int1小于int2为真 
    int1 -le int2    int1小于等于int2为真
    
    3、文件的判断
    -r file     用户可读为真 
    -w file      用户可写为真 
    -x file     用户可执行为真 
    -f file     文件为正规文件为真 
    -d file     文件为目录为真 
    -c file     文件为字符设备文件为真 
    -b file     文件为块设备文件为真 
    -s file     文件大小非0时为真 
    
    4、复杂逻辑判断
    -a         与 
    -o        或 
    !         非
    

    5、switch/case结构

    #!/bin/bash
    SYSTEM=`uname -s`
    
    case $SYSTEM in
        Linux)
            echo "Linux System"
            ;;
    
        FreeBSD)
            echo "FreeBSD System"
            ;;
    
        Solaris)
            echo "Solaris System"
            ;;
    
        *)  
            echo "Unknow System"
            ;;
    
    esac   
    

    6、Shell循环

    举例 1:
    
    #!/bin/bash
    
    echo "Use for list 1~10"
    for i in `seq 1 10` ; do 
        echo $i
    done
    
    echo "List file in current folder:"
    for file in `ls`
    do
        echo $file
    done
    
    举例 2:
    
    #!/bin/bash
    
    echo "Use while list 1~10"
    min=1
    max=10
    while [ $min -le $max ]
    do
        echo $min
        min=`expr $min + 1`
    done
    

    6、Shell参数解析

    • 参数说明:

        $#  表示参数的个数   
        $*  表示所有的参数
        $0  表示程序的名字  
        $1  表示第一个参数  
        $2  表示第二个参数
      
    • 参数解析
      实现不同参数,执行不同命令

        举例:
        #!/bin/bash
        while getopts "hv" opt     #Parser the arguments
        do
           case $opt in
             h)
                 usage      ;;
             v)
                 version    ;;
             ?)  
                 usage      ;;
           esac
        done
      

    函数调用不需要加括号。

    Shell的其他应用

    Shell调试

    打开调试 set -x
    关闭调试 set +x

    例如: set -x xxx.sh

    在shell脚本中添加,可局部打开调试。

    Bash Shell段注释

      :<< EOF
    
      注释掉的代码
    
      EOF
    

    配置文件使用

    source 或 . 命令可以让ini格式文件的引用生效。

    例如:
    #!/etc/bash.sh
    CONF_FILE=/etc/sysconfig/network-scripts/ifcfg-eth0
    
    source $CONF_FILE
    etho  $IPADDR 
    

    如上,变量IPADDR,未在shell中赋值,但却打印出了IP地址。原因是 source $CONF_FILE,是/etc/sysconfig/network-scripts/ifcfg-eth0文件中的IPADDR,被引用到此shell中。

  • 相关阅读:
    python操作MYSQL时防止SQL注入
    防止SQL注入的一些解决方法
    Gitbook 学习链接
    MySQL_编码utf8_bin和utf8_general_ci的区别
    使用linux脚本shell检查大数据各节点服务是否运行正常
    shell脚本监测elasticsearch集群节点
    Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建日志收集系统
    python中集合用法大全
    python常用内置函数
    跨模块全局变量的使用问题
  • 原文地址:https://www.cnblogs.com/NickQ/p/8870423.html
Copyright © 2011-2022 走看看