• 关于shell脚本编程出现的问题


    正则表达式

    KaTeX parse error: Can't use function '.' in math mode at position 22: …=~ ^[-[:alnum:]̲.̲_]+
    查找$REPLY变量里行首行尾,以-,后面是任意数字和._最少出现一次以上
    KaTeX parse error: Can't use function '.' in math mode at position 25: …^-?[[:digit:]]*̲.̲[[:digit:]]+
    查找$REPLY变量里行首行尾,-出现0次或一次,相同任意数字任意次 . 任意数字最少一次
    R E P L Y =   − ? [ [ : d i g i t : ] ] + REPLY =~ ^-?[[:digit:]]+ REPLY= ?[[:digit:]]+
    查找$REPLY变量里行首行尾,-出现0次或一次,任意数字最少一次

    参数

    显示换行

    echo -e "OK! 
    " # -e 开启转义
    echo "It is a test"
    

    输出结果

    OK!
    
    It is a test
    

    显示不换行

    #!/bin/sh
    echo -e "OK! c" # -e 开启转义 c 不换行
    echo "It is a test"
    

    输出结果

    OK! It is a test
    

    显示结果定向至文件

    echo "It is a test" > myfile
    

    原样输出字符串,不进行转义或取变量(用单引号)

    echo '$name"'
    

    输出结果

    $name"
    

    显示命令执行结果

    echo `date`
    

    注意: 这里使用的是反引号 `, 而不是单引号 '。

    结果将显示当前日期

    Thu Jul 24 10:08:46 CST 2014
    

    echo输出的字符串总结

    ================================================================

     			|  能否引用变量  |  能否引用转移符  |  能否引用文本格式符(如:换行符、制表符)
    
    单引号  		|		否		|		否		  |		否		
    
    双引号  		|		能		|		能		  |		能
    
    无引号  		|		能		|		能		  |		否        
    

    ================================================================

    read命令

    read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。

    测试文件 test.sh 代码如下:

    read firstStr secondStr
    echo "第一个参数:$firstStr; 第二个参数:$secondStr"
    

    执行测试:

    $ sh test.sh 
    一 二 三 四
    第一个参数:一; 第二个参数:二 三 四
    

    实例, 文件 test.sh:

    read -p "请输入一段文字:" -n 6 -t 5 -s password
    echo -e "
    password is $password"
    

    参数说明:

    • -p 输入提示文字
    • -n 输入字符长度限制(达到6位,自动结束)
    • -t 输入限时
    • -s 隐藏输入内容
    $ sh test.sh 
    请输入一段文字:
    password is asdfgh
    

    print与printf的区别

    1,print 中不能使用%s ,%d 或%c;

    2,print 自动换行,printf 没有自动换行

    linux shell数组赋值方法

    Bash中,数组变量的赋值有两种方法:

    (1) name = (value1 … valuen) 此时下标从0开始

    (2) name[index] = value

    下面以一个简单的脚本来说明,脚本内容如下:

    	#!/bin/bash
      #定义数组
      A=(a b c def)
    

    #把数组按字符串显示输出

    	echo ${A[@]}
    

    #屏幕显示:a b c def

    #数组的长度表示${#A[*]}

      len=${#A[*]}
      echo ${#A[*]}
    

    #屏幕显示:4

    #改变数组元素的值
      A[3]='vivian'
      echo ${A[*]}
    

    #屏幕显示:a b c vivian

      #循环输出数组元素
      i=0
      while [ $i -lt $len ]
      do
      echo ${A[$i]}
      let i++
      done
    

    #屏幕输出:
      #a
      #b
      #c
      #vivian

    #循环输出数组元素的另一种写法,注意,在条件中,引用变量一定要用双引号 ,否则报错

      for (( j=0; j<"$len"; j=j+1 ))
      do
      echo ${A[$j]}
      done
    

    #循环输出数组元素的另一种写法,注意, A [ ∗ ] 不 能 写 成 {A[*]}不能写成 A[]A , A 默 认 是 第 一 个 元 素 , 如 果 A = &quot; a b c d e d &quot; , 就 可 以 写 A默认是第一个元素,如果A=&quot;a b c ded&quot;,就可以写 A,A="abcded",A

      for value in ${A[*]}
      do
      echo $value
      done
    

    数组

    声明一个数组变量

    直接赋值:

    array[0]=”Zero” array[1]=”One” array[2]=”Two”
    

    declare声明:

    declare -a array
    

    小括号空格法:

    array=(Zero One Two)
    

    引号空格法:

    array=”Zero One Two”
    

    混合法:

    array=([0]=”Zero” [1]=”One” [2]=”Two”) 
    

    遍历一个数组

    标准for循环:

    for(( i=0;i<${#array[@]};i++)) 
    do 
      echo ${array[i]}
    done
    #输出结果
    Zero
    One
    Two
    

    for…in:

    for i in ${array[@]}
    do 
      echo $i
    done
    #输出结果
    Zero
    One
    Two
    

    获取数组的长度

    echo ${#array[@]}
    3
    echo ${#array[*]}
    3
    

    删除数组元素

    unset array[0]
    echo ${#array[@]}
    2
    for i in ${array[@]}
    do 
      echo $i 
    done
    One
    Two
    

    切片

    echo ${array[@]:0:1}
    Zero
    echo ${array[@]:0:2}
    Zero One
    echo ${array[@]:0:3}
    Zero One Two
    echo ${array[@]:1}
    One Two
    echo ${array[@]:2}
    Two
    

    更多文档需求可以在[http://www.runoob.com/linux/linux-tutorial.html]中找到

  • 相关阅读:
    windows下大数据开发环境搭建(3)——Scala环境搭建
    windows下大数据开发环境搭建(1)——Java环境搭建
    windows下大数据开发环境搭建(2)——Hadoop环境搭建
    I/O复用
    SuRF : Practical Range Query Filtering with Fast Succinct Tries
    信号处理
    进程间通信
    简易内存分配器的实现
    socket编程(C++)
    C++—程序的内存分区
  • 原文地址:https://www.cnblogs.com/ycycn/p/13788372.html
Copyright © 2020-2023  润新知