zoukankan      html  css  js  c++  java
  • Shell-Bash语言-变量

    变量定义
    a=1
    b=seveniruby
    d="hello from testrhome"
    e='hello from "霍格沃兹测试学院"'

    =左右不要有空格
    如果内容有空格,需要使用单引号或者双引号
    双引号支持转义$开头的变量会被自动替换
    变量使用
    echo $a
    echo ${b}
    echo "$a"

    echo类似print
    使用$var 或${var}来访问变量。后者更为严谨。$var_x${var}_x是不同的。
    变量不需要定义也可以使用。引用未定义的变量,默认为空值。

    #!/bin/bash
    a=1
    b=seveniruby
    echo '$a'
    echo "$a"
    echo ${b}

    运行结果如下:

    预定义变量
    echo $PWD:当前目录
    echo $USER:当前是谁
    echo $HOME:当前主目录
    echo ~:当前主目录
    echo $PATH
    echo $RANDOM
    运行结果如下:

    变量类型
    字符串 a='xx'
    数字 i=1314
    布尔 true false
    数组 array=(a b c)
    函数 foo(){echo hello world}
    高于4.x的shell没有hash词典功能

    数字型变量操作
    计算
      i=1;echo $i;echo $((i+1))
    更新
      ((i=i+1));echo $i
    只能进行整数计算
    浮点数计算请使用awk 'BEGIN{print 1/3}'
    格式化显示可以使用awk 'BEGIN{printf("%.2f ", 1/3)}'

    字符串操作
    取值
      ${value:offset}   ${value:offset:length}从变量中提取子串
      ${#value}字符串长度
      ${#array[*]}和${#array[@]}表示数组中元素的个数

    x="hogwarts"
    echo $x
    echo ${#x}
    echo ${x:3}
    echo ${x:0:3}
    echo ${x:1:3}

    运行结果如下:

    掐头去尾和内容替换
      ${value#pattern} ${value##pattern} #表示掐头
      ${value%pattern} ${value%%pattern} %表示去尾
      ${value/pattern/string} ${value//pattern/string} /表示替换
      #与## %与%% /与//的区别:最短匹配模式VS最长匹配模式
      ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

    x="hogwarts"
    echo ${x#*g}  #前面的是*,删到g
    x="hogwarts from testerhome"
    echo ${x#*t}
    echo ${x##*t}

    运行结果如下:

    AWK可以替代这些操作,推荐使用AWK

    x="hogwarts from testerhome"
    echo $x | awk 'BEGIN{FS="t"}{print $1}'
    echo $x | awk 'BEGIN{FS="t"}{print $2}'
    echo $x | awk -F "r" '{print $1}'

    运行结果如下:

    布尔变量
    true
    false
    命令执行返回值$?
      任何命令执行都会有一个返回值
      0表示正确
      非0表示错误
    history | tail -10   查看最近的10条命令
    echo $?    返回0,表示上一条命令正常执行

    判断的类型
    算术判断
    [ 2 -eq 2 ] 相等
    [ 2 -ne 2 ] 不等
    [ 3 -gt 1 ] 大于
    [ 3 -ge 3 ] 大于等于
    [ 3 -lt 4 ] 小于
    [ 3 -le 3 ] 小于等于
    (())也可以表示算术比较。((10>8)),((10==10))

    字符串判断

    [ string1 = string2 ] 如果两字符串相同,则结果为真
    [ string1 != string2 ] 如果两字符串不相同,则结果为真
    [ -n "$var" ] 如果字符串不是空,则结果为真
    [ -z "$var" ] 如果字符串是空,则结果为真
    [[ "xxxx" == x* ]] 在表达式中表示0或者多个字符
    [[ xxx == x?? ]] 在表达式中表示单个字符
    在引用变量的时候要记得加双引号[-z "$a"]否则当a未定义时会语法报错
    a=xxxx
    b=xxx
    [ "$a" == "$b" ]
    逻辑判断

    [ 2 -ge 1 -a 3 -ge 4 ];echo $? 与
    [ 2 -ge 1 -o 3 -ge 4 ];echo $? 或
    [[ 2 -ge 1 && 3 -ge 4 ]];echo $? 与
    [[ 2 -ge 1 || 3 -ge 4 ]];echo $? 或
    [ !2 -ge 1 ];echo $? 非

    shell内置判断

    -e file 如果文件存在,则结果为真
    -d file 如果文件是一个子目录,则结果为真
    -f file 如果文件是一个普通文件,则结果为真
    -r file 如果文件可读,则结果为真
    -s file 如果文件的长度不是0,则结果为真
    -w file 如果文件可写,则结果为真
    -x file 如果文件可执行,则结果为真
    [[]]是[]的扩展语法,在老的sh里并不支持。推荐用[]

    数组变量
    array=(1 3 4 6)
    array=('ls')
    array[2]="hello world"

    echo ${array[2]}
    echo ${array[*]}
    echo ${#array[*]}
    使用()来定义数组变量,中间使用空格隔开

  • 相关阅读:
    iOS 8 界面设计 PSD 模板(iPhone 6),免费下载
    20个华丽的时间轴例子,寻找网页设计灵感
    Hello.js – Web 服务授权的 JavaScript SDK
    Web 开发人员和设计师必读文章推荐【系列三十】
    Arctext.js
    30套免费的响应式 HTML5 & CSS3 模板下载
    Midnight.js – 实现奇妙的固定头部切换效果
    推荐20个很有帮助的 Web 前端开发教程
    SweetAlert – 替代 Alert 的漂亮的提示效果
    其实每个行业都有各自的辛苦,好的程序员并不累,他们乐此不疲(见过太多在职位事业、人生方向上随转如流的人,累了疲乏了就去做别的事情了。必须有自己的坚守和立足的点,自我驱动,否则沦为在别人的体制制度中被驱赶一生)good
  • 原文地址:https://www.cnblogs.com/peiya/p/12584424.html
Copyright © 2011-2022 走看看