zoukankan      html  css  js  c++  java
  • 【Shell】Linux Shell脚本基础命令

    因为只是要写个脚本下数据,o(T.T)o,所以就浅尝辄止下下。只是需要用到的用法用下。

    注: Cygwin环境下的,由于是模拟环境所以有些写法和Linux不一样。

    1. 数组
    简单小程序:

    name=(a b c d e f g h)
    for i in ${name[*]}
    do
    echo $i
    done

    要注意的是,首先书写不能像在C++和Java中那么随意,运算符号什么的一定要紧靠着写,譬如说上例中第一句写成:name = (a b c d e f g h ) 就会报错。

    或者可以直接写成

    for i in a b c d e f g h
    do
    echo $i
    done

    2. While 循环

    While循环的判断条件不能是像C++和Java直接是字符运算,譬如说 while [ $((i>0)) ],自己猜可能是C++里面的布尔值是int值改的,而脚本里布尔值和数值不能窜吧?

    一个两重循环:

    date=(10 2)
    for i in ${date[*]}
    do
    echo $i
      while [ 0 -le "$i" ];
        do
        $((i--))
        echo $i
      done
    done

    备注网上找来的判断符号写法(网址:http://space.itpub.net/187805/viewspace-558085

    []里面的条件判断。
    
    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时为真
    -t file     当文件描述符(默认为1)指定的设备为终端时为真
    
    4 复杂逻辑判断
    
    -a         与
    -o        或
    !        非

     注意:Shell的语法真心难。。譬如判断那里,如果写成:if [ "ls"="rs" ] 就是赋值,中间要有空!!要写成 if [ "ls" = "rs" ]。。。

    3.  if 判断

    有了上面的基础,if判断就很简单了。需要注意的是判断句都要后面写个分号";",还有就是if的最后要写的反写的if: fi

    month=10
    day=5
    if [ $month -eq 5 ]; then
      echo "MONTH YES"
    elif [ $day -eq 5 ]; then
      echo "DAY YES"
    else
      echo "NO"
    fi

    4. 用&符号简单并行

    将&符号写于执行语句的后面便可以将语句进行并行。

    注意:要并行循环的话必须将&符号写在for里才行。

    #!/bin/bash
    #函数,便于调用
    sleep()
    {
      echo "Begin Date: $D"
      Sleep 10
      echo "End   Date: $D"
    }
    
    date=(1 2 3 4 5 6)
    for D in ${date[*]}
    do
    sleep&
    done
    
    #等待所有的进程结束
    wait
    
    echo "FINISH"

    结果可以看到基本上同时开始同时结束:

    5. 读取文件夹下面列出的文件名字

    这个只要用一个命令ls,但是要注意ls会把自己也列出来,具体为什么真心不清楚。

    for X in ls $Date-*.dat   #$Date是变量
  • 相关阅读:
    程序员书单
    36条极简人生建议
    Nacos
    jvm详解
    22种世界500强都在用的高效工作方法,你了解几种?
    道德经39经典
    积累的力量
    JUC之线程间定制化通信
    JVM调优参考
    docker开机启动和dockercompose开机启动执行相应的各个docker容器
  • 原文地址:https://www.cnblogs.com/xiaoka/p/2470327.html
Copyright © 2011-2022 走看看