zoukankan      html  css  js  c++  java
  • Shell笔记

    Shell笔记

    记录shell的常用语句

    1. 基本变量使用

    #!/bin/bash
    a="Hello World"  # 变量定义,等号后面不能加空格
    echo $a  # 使用变量
    a="Hi"
    echo "${a} World"  # 使用变量时可以加上{}来避免歧义
    
    # for循环
    for skill in Ada Colle Action Java; do
        echo "I am good at ${skill}Script"
    done
    
    # 删除变量
    unset a
    echo $a
    
    word="2333"
    # 单引号字符串,完全原样输出
    echo 'Hello World ${word}'
    # 双引号允许加转义和变量
    echo "Hello World "${word}"!"
    
    #字符串长度
    str="abcd"
    echo "${#str} chars"
    
    #提取子字符串
    str="google is a great enterprise"
    echo ${str:2:5}
    
    # 查找子字符串(使用``可以执行shell命令)
    echo `expr index "$str" is` # 8
    
    # 数组
    array=(value0 value1 value2 value3)
    echo ${array[0]} ${array[2]} ${array[3]}
    echo ${array[@]} # 表示全部
    size=${#array[@]} # 数组个数,用法和字符串一致
    echo ${size}
    
    # 多行注释
    :<<EOF
    注释内容...
    注释内容...
    注释内容...
    EOF
    

    输出结果:

    Hello World
    Hi World
    I am good at AdaScript
    I am good at ColleScript
    I am good at ActionScript
    I am good at JavaScript
    
    Hello World ${word}
    Hello World "2333"!
    4 chars
    ogle
    8
    value0 value2 value3
    value0 value1 value2 value3
    4
    

    2. 参数传递

    para.sh

    #!/bin/bash
    echo "执行的文件名:$0"
    echo "传递的参数作为一个字符串显示:$#"
    echo "所有参数:$@"
    echo "第一个参数:$1"
    echo "第二个参数:$2"
    echo "第三个参数:$3"
    

    命令行运行

    ➜  Sh ./para.sh 1 2 ok
    执行的文件名:./para.sh
    传递到脚本的参数个数:3
    传递到脚本的参数个数:1 2 ok
    第一个参数:1
    第二个参数:2
    第三个参数:ok
    

    3. 基本运算符

    #!/bin/bash
    
    # 算术运算
    a=10
    b=20
    echo "a + b = `expr $a + $b`"
    echo "a * b = `expr $a * $b`"
    if [ $a == $b ]
    then
        echo "a == b"
    else
        echo "a != b"
    fi
    
    # 关系运算
    if [ $a -gt $b ]
    then
       echo "$a -gt $b: a > b"
    fi
    if [ $a -lt $b ]
    then
       echo "$a -lt $b: a < b"
    fi
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a = b"
    fi
    
    # 逻辑运算
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
       echo "a < 100 && b > 100"
    fi
    
    if [[ $a -lt 100 || $b -gt 100 ]]
    then
       echo "a < 100 || b > 100"
    fi
    
    # 字符串
    a="abc"
    b="efg"
    if [ $a = $b ]
    then
        echo "string a = string b"
    else
        echo "string a != string b"
    fi
    
    if [ $a ]
    then
       echo "$ab : 字符串不为空"  # 也就是未定义
    else 
       echo "$a : 字符串为空"
    fi
    
    # 文件测试
    file = "operator.sh"
    if [ -r $file ]
    then
       echo "文件可读"
    else
       echo "文件不可读"
    fi
    if [ -w $file ]
    then
       echo "文件可写"
    else
       echo "文件不可写"
    fi
    if [ -x $file ]
    then
       echo "文件可执行"
    else
       echo "文件不可执行"
    fi
    if [ -f $file ]
    then
       echo "文件为普通文件"
    else
       echo "文件为特殊文件"
    fi
    if [ -d $file ]
    then
       echo "文件是个目录"
    else
       echo "文件不是个目录"
    fi
    if [ -s $file ]
    then
       echo "文件不为空"
    else
       echo "文件为空"
    fi
    if [ -e $file ]
    then
       echo "文件存在"
    else
       echo "文件不存在"
    fi
    

    运行输出

    a + b = 30
    a * b = 200
    a != b
    10 -lt 20: a < b
    a < 100 || b > 100
    string a != string b
     : 字符串不为空
    文件可读
    文件可写
    文件不可执行
    文件为普通文件
    文件不是个目录
    文件不为空
    文件存在
    

    4. 流程控制

    #!/bin/bash
    
    # if语句
    a=10
    b=20
    if [ $a -gt $b ]
    then 
        echo "a > b"
    elif [ $a -eq $b ]
    then
        echo "a == b"
    else
        echo "a < b"
        echo "2333"  # 每一块可以执行多条语句
    fi
    
    # case语句
    echo '输入1到3之间的数字'
    echo '你输入的数字为:'
    read aNum  # read命令从终端读取输入
    case $aNum in 
        1)  echo '你输入了1'
        ;;
        2)  echo '你输入了2'
        ;;
        3)  echo '你输入了3'
        ;;
        *)  echo '你输入了其他数'
        ;;
    esac
    
    # for循环
    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    
    # whil循环
    a=1
    while(($a<=7))
    do
        echo $a
        let "a=a+2"  # bash的命令
        if [ $a = 5 ]
        then
            break
        fi
    done
    

    运行输出

    a < b
    2333
    输入1到3之间的数字
    你输入的数字为:
    4
    你输入了其他数
    The value is: 1
    The value is: 2
    The value is: 3
    The value is: 4
    The value is: 5
    1
    3
    

    5. 函数

    #!/bin/bash
    
    sum() {
        s=0
        for num in $@
        do
            s=$(($s+$num))
        done
        return $s
    }
    result=$(sum 1 2 3)
    echo $?
    

    运行结果

    6
    

    比较常用的命令都在了,更复杂的场景感觉还是用python之类的合适一点

  • 相关阅读:
    hdu6070
    hdu6059( Trie )
    hdu4757(可持久化 Trie )
    csu1216( Trie )
    hdu6058
    hdu6049
    hdu6052
    hdu6041
    hdu1269(有向图强连通分量)
    bzoj2159: Crash 的文明世界
  • 原文地址:https://www.cnblogs.com/fanghao/p/9771368.html
Copyright © 2011-2022 走看看