zoukankan      html  css  js  c++  java
  • shell语法

    shell script的定义

    将OS命令堆积到可执行的文件里,由上至下的顺序执行文本的OS命令就是shell脚本。再加上智能(条件/流控)控制,就变成智能化脚本。

    shell脚本的基本组成

    声明和注释
    系统命令
    变量
    运算符
    条件判断
    循环结构
    函数

    shell声明和注释

    shell脚本的第一行一般为:

    #!/bin/bash
    

    这条语句的作用是指定调用的解释器是/bin/bash。
    注释就是脚本中#号后面的内容,类似于C语言的//

    shell变量

    shell变量有系统变量和自定义变量,这里主要介绍下自定义变量和使用。
    定义变量时,变量名不加美元符号($),如:

    [root@bogon sh]# variableName='value'
    [root@bogon sh]# echo $variableName  
    value  
    [root@bogon sh]# variableName=12  
    [root@bogon sh]# echo $variableName  
    12  
    [root@bogon sh]# variable=$(seq 3)
    [root@bogon sh]# echo $variable
    1 2 3
    

    不仅可以将字符串、数字赋值给一个变量,还可以将命令的结果赋值给变量。
    注意,变量名和等号之间不能有空格,这是和其它编程语言不一样的地方

    变量名的命名规则:

    • 以字母或下划线开头
    • 中间不能有空格,可以使用下划线
    • 不能使用标点符号
    • 不能使用bash里的关键字。(可以help查看保留关键字)
      变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况就必须加了:

    for i in {1..20}  
    do  
    	echo ${i}%  
    	echo ${i}step  
    done  
    

    所有推荐常用shell编程的人员给所有变量加花括号。

    运算符

    算数运算符

    +  -  *  /  %
    加 减 乘 除 取余
    

    linux的数学运算常用(())和bc,例如:

    [root@bogon sh]# echo $((5+3))  
    8  
    [root@bogon sh]# echo $((5%3))  
    2  
    [root@bogon sh]# echo 5%3|bc  
    2  
    [root@bogon sh]# echo 5+3|bc  
    8  
    [root@bogon sh]#   
    

    需要注意:(())只能用于整数的运算,bc有相应选项支持结果是小数,但是当结果是小于1时不显示整数,如下:

    [root@bogon sh]# echo 'scale=2;7/10'|bc -l
    .70
    [root@bogon sh]# echo 'scale=2;17/10'|bc -l
    1.70
    [root@bogon sh]# echo 'scale=2;27/10'|bc -l
    2.70
    [root@bogon sh]# 
    

    介绍下常用的类似取磁盘使用率百分之多少方法:

    [root@bogon sh]# echo 'scale=2;1/3'|bc -l  
    .33  
    [root@bogon sh]# echo 'scale=2;1/3'|bc -l|cut -d '.' -f2  
    33  
    [root@bogon sh]# echo $(echo 'scale=2;1/3'|bc -l|cut -d '.' -f2)%  
    33%  
    

    关系操作

    <    >    <=    >=    ==    !=    &&    ||
    

    多与(())连用

    赋值运算符

    =    +=    *=    /=    %=
    示例:
    [root@bogon ~]# echo $((x+3))  
    5  
    [root@bogon ~]# x=2  
    [root@bogon ~]# echo $((x+=3))  
    5
    

    测试操作

    用途:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其它数值

    语法:

    test 条件表达式 或者 [ 条件表达式 ]
    文件测试

    -f FILE    文件存在并且是普通文件
    -d FILE    文件存在并且是目录
    -e FILE    文件存在
    -h FILE    文件存在并且是链接文件
    -b FILE    文件存在并且是块设备文件
    

    注意:-f判断文件时,如果文件是链接文件会去判断链接文件的源文件,如果对一个目录下文件分类计数,需要先用-h去判断完链接文件

    字符串测试

    字符串测试建议使用双方括号,可以解决变量中带空格的问题。里面可以使用通配符。
    格式:[[ 字符串1 = 字符串2 ]]

    =    两个字符串相等
    !=    两个字符串不相等
    -z    字符串为空(zero)
    -n    非空字符串(nonzero)
    

    示例:

    [root@bogon ~]# read -p "input var1: " var1
    input var1: abc
    [root@bogon ~]# read -p "input var2: " var2
    input var2: 123
    [root@bogon ~]# [[ $var1 = $var2 ]]
    [root@bogon ~]# echo $?
    1
    [root@bogon ~]# [[ $var1 != $var2 ]]
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# 
    

    数值测试

    操作符

    -eq    等于(equal)
    -ne    不等于(not equal)
    -gt    大于(greater than)
    -lt    小于(less than)
    -ge    大于等于(greater than or equal)
    -le    小于等于(less than or equal)
    

    示例:

    [root@bogon ~]# read -p "input num1: " num1
    input num1: 20
    [root@bogon ~]# read -p "input num2: " num2
    input num2: 50
    [root@bogon ~]# [ $num1 -ne $num2 ]
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# [ $num1 -gt $num2 ]
    [root@bogon ~]# echo $?
    1
    [root@bogon ~]# [ $num1 -lt $num2 ]
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# [ $num1 -le $num2 ]
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# 
    

    不过建议数值比较使用双圆括号如下:

    [root@bogon ~]# read -p "input num1: " num1
    input num1: 20
    [root@bogon ~]# read -p "input num2: " num2
    input num2: 50	
    [root@bogon ~]# ((num1==num2))
    [root@bogon ~]# echo $?
    1
    [root@bogon ~]# ((num1!=num2))
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# ((num1>num2))
    [root@bogon ~]# echo $?
    1
    [root@bogon ~]# ((num1<num2))
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# ((num1<=num2))
    [root@bogon ~]# echo $?
    0
    [root@bogon ~]# 
    

    条件判断

    if判断:
    语句示例:

    read -p "please input your file: " file
    
    if [ -b $file ];then
    	echo "$file is block file"
    elif [ -f $file ];then
    	echo "$file is regular file"
    elif [ -d $file ];then
    	echo "$file is directory file"
    else
    	echo "$file type is unknown"
    fi
    

    case语句

    read -p "please input your score: " score
    case $score in
    A|a)
    echo "your score is A"
    ;;
    B|b)
    echo "your score is B"
    ;;
    C|c)
    echo "your score is C"
    ;;
    D|d)
    echo "your score is D"
    ;;
    *)
    echo "input error"
    esac
    

    循环结构

    while循环

    [root@bogon sh]# cat while.sh 
    #!/bin/bash
    i=0
    while [[ $i -le 10 ]]
    do
    ((i++))
    if [[ $i -eq 3 ]];then
    	continue
    elif [[ $i -eq 8 ]];then
    	break
    else
    	echo  $i
    fi
    done
    [root@bogon sh]# bash  while.sh 
    1
    2
    4
    5
    6
    7
    [root@bogon sh]# 
    

    for循环

    #!/bin/bash
    for i in $(seq -w 10)
    do
    	echo $i
    done
    [root@bogon sh]# bash for.sh 
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    [root@bogon sh]#
  • 相关阅读:
    cocos2d-js 写日志log 查看日志log Android调试查看log
    嵌入式开发之hi3519---网络不通问题rmii
    嵌入式开发之视频压缩比---h264、mjpeg、mpeg4
    c、c++---linux上的GetTickCount函数
    嵌入式开发之hi3516---GV7601 SPI通信问题
    嵌入式开发之hisilicon---hi3536 处理器简介
    嵌入式开发之zynq---Zynq PS侧I2C驱动架构
    嵌入式开发值zynq---zynq中tlv320aic23b spi的驱动移植
    jumpserver 3.2修改排序规则
    haproxy 非常完整的配置
  • 原文地址:https://www.cnblogs.com/liao-lin/p/6946887.html
Copyright © 2011-2022 走看看