zoukankan      html  css  js  c++  java
  • shell基础

    shell基础

    变量

    # 使用变量,建议方式
    ${var}
    # 在变量名var后是空格时才可用如下方式
    $var
    
    # 设定只读变量
    declare -r var_name
    readonly var_name
    
    # 删除变量
    uset var_name
    

    字符串变量

    # 字符串的定义
    var_string="hello world"
    
    # 字符串的长度计算
    ${#var_string}
    
    # 字符串拼接
    var_string_new="${var_string} new string"
    
    ######## 字符串操作 ########
    # 根据起始和截取长度截取字符串
    ${string_var:start_index:length} 
    

    变量赋值

    # 除了显式赋值,也可以将命令的结果存入到变量,如下就是将`ls /etc`的结果存到到了file_array
    file_array=$( ls /etc )
    
    # 也可以使用` 命令 `方式
    file_array=` ls /etc `
    
    # 应用:循环访问文件
    for file in $( ls /etc )
    do
          # do something
    done
    

    数组变量

    # 数组的定义
    array_var=(val0 val1 val2)
    
    # 单独定义每个元素
    array_var[0]=val0
    array_var[1]=val1
    
    # 获取所有元素
    ${array_var[@]}
    
    # 获取数组的长度/元素个数
    ${#array_var[@]}
    ${#array_var[*]}
    
    # 获取单个元素长度
    ${#array_var[n]}
    

    运算符

    算数运算符

    • +、-、*、/,% 借助expr进行计算,例如expr $var1 + $var2
    • = 赋值
    • == 数字比较相等返回true,[ $var1 == $var2 ]
    • != 数字比较不相等返回true,[ $var1 != $var2 ]

    关系运算符

    关系运算符只用于比较数字之间的关系,不支持字符串,除非字符串的值是数字

    • -eq 数字相等返回true,[ $var1 -eq $var2 ] => ==
    • -ne 数字不相等返回true,[ $var1 -nq $var2 ] => !=
    • -gt 左边大于右边返回true,[ $var1 -gt $var2 ] => >
    • -lt 左边小于右边返回true,[ $var1 -lt $var2 ] => <
    • -ge 左边大于等于右边返回true,[ $var1 -ge $var2 ] => >=
    • -le 左边小于等于右边返回true,[ $var1 -le $var2 ] => <=

    布尔运算符

    var1=10,var2=20

    • ! 非运算,表达式为false,返回true,[ ! false ]返回true
    • -o 或运算,有一个表达式为true就为true,[ $var1 -lt 20 -o $var1 -gt 100 ]返回true
    • -a 与运算,所有表达式为true才是true,[ $var1 -lt 20 -a $var1 -gt 100 ]返回false

    逻辑运算符

    • && :逻辑的AND
    • || :逻辑的OR
    # 注意需要两个嵌套的中括号
    if [[ ${var1} == 0 && ${var2} == 0 ]];then
         // do something
    fi
    

    字符串运算符

    var1="abc",var2="efg"

    • = 检测字符串相等返回true,[ $var1 = $var2 ]返回false
    • != 检测字符串不相等返回true,[ $var1 != $var2 ]返回true
    • -z 检测字符串长度为0返回true,[ -z $var1 ]返回false
    • -n 检测字符串长度不为0返回true,[ -n $var1 ]返回true
    • $ 检测字符串不为空返回true,[ $var1 ]返回true
    ########## 字符串为空和字符串长度的运算测试 ##########
    #!/bin/bash
    
    var1=
    var2=""
    
    if [ -z $var1 ];then
        echo "var1 字符串长度为0"
    else
        echo "var1 字符串长度不为0"
    fi
    
    if [ -z $var2 ];then
        echo "var2 字符串长度为0"
    else
        echo "var2 字符串长度不为0"
    fi
    
    if [ -z $no_exits ];then
        echo "no_exits 字符串长度为0"
    else
        echo "no_exits 字符串长度不为0"
    fi
    
    if [ $var1 ];then
        echo "var1 字符串不为空"
    else
        echo "var1 字符串为空"
    fi
    
    if [ $var2 ];then
        echo "var2 字符串不为空"
    else
        echo "var2 字符串为空"
    fi
    
    if [ $no_exits ];then
        echo "no_exits 字符串不为空"
    else
        echo "no_exits 字符串为空"
    fi
    
    ########## 输出 ##########
    var1 字符串长度为0
    var2 字符串长度为0
    no_exits 字符串长度为0
    var1 字符串为空
    var2 字符串为空
    no_exits 字符串为空
    
    ########## 结论 ##########
    字符串长度和字符串是否为空的运算*好像*是一致的,他们有没有区别呢?
    

    文件测试运算符

    使用方法:<operator> file_name

    operator

    • -e 文件是否存在
    • -r 文件可读检测
    • -w 文件可写检测
    • -x 文件可执行检测
    • -d 目录检测
    • -f 普通文件检测(既不是目录,也不是设备文件)
    • -b 块设备检测
    • -c 字符设备检测
    • -p 有名管道检测
    • -s 文件大小是否为0
    • -S 文件是否是socket连接
    • -L 文件是否存在并且是一个符号链接
    • -g 文件SGID位检测
    • -u 文件SUID位检测
    • -k 文件粘滞位(Sticky Bit)检测

    流程控制

    参考文章

    【1】Shell 教程

  • 相关阅读:
    集算器如何优化SQL计算(2)分组
    集算器如何优化SQL计算(1)动态列
    android DOM解析Xml
    ASP.NET 抓取网页内容
    抓取HTML网页数据
    [转]Android的网络与通信
    Android的三种网络通信方式
    Android通过onDraw实现在View中绘图操作
    Android Canvas类介绍
    DatabaseMetaData的用法(转)
  • 原文地址:https://www.cnblogs.com/delta1037/p/13442196.html
Copyright © 2011-2022 走看看