shell 基础

shell 基础

  1. 基础信息

    • shell脚本扩展名为.sh 使用vi/vim创建即可

    • #!/bin/bash 通常为shell脚本第一行,*#!*告诉脚本使用什么解释器执行

    • 执行方式

      1. 作为可执行程序

        chmod +x ./test.sh  #使脚本具有执行权限
        ./test.sh  #执行脚本
        
      2. 作为解释器参数

        /bin/sh test.sh
        /bin/php test.php
        

        第一行不需要指定解释器信息

  2. shell变量

    • 变量名和等号之间不能有空格

    • 使用变量:变量名前面加美元符号 变量名外面的花括号是可选,帮助解释器识别边界

    • echo ${#string}   #获取字符串长度
      
    • string="runoob is a great site" #从字符串第 2 个字符开始截取 4 个字符
      echo ${string:1:4} # 输出 unoo	
      
    • string="runoob is a great site"	#查找字符 i 或 o 的位置(哪个字母先出现就计算)
      echo `expr index "$string" io`  # 输出 4
      
  3. 数组

    • 定义数组 array_name=(value0 value1 value2 value3)

    • 还可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制

      array_name[0]=value0
      array_name[1]=value1
      array_name[n]=valuen
      
    • 读取数组

      valuen=${array_name[n]}
      echo ${array_name[@]}  @可以读取数组所有元素值
      
    • 获取数组长度

      # 取得数组元素的个数
      length=${#array_name[@]}
      # 或者
      length=${#array_name[*]}
      # 取得数组单个元素的长度
      lengthn=${#array_name[n]}
      
  4. 注释

    • 单行注释 #

    • 多行注释

      :<<EOF
      注释内容...
      注释内容...
      注释内容...
      EOF
      
  5. 传递参数

    • 第一个参数$1,第二个参数$2,以此内推
    • 其他字符
      • $#传递参数个数
      • $$当前进程号
      • $*单字符串显示所有传递参数
      • $@依次显示所有传递参数
  6. 运算符

    • 算术运算符

      • 使用expr命令实现,

        #!/bin/bash
        
        val=`expr 2 + 2`
        echo "两数之和为 : $val"
        

        注意:表达式和运算符之间要有空格,乘号(*)前边必须加反斜杠(\)才能实现乘法运算.

        ​ 条件表达式要放在方括号之间,并且要有空格

    • 关系运算符

      • -eq 相等
      • -ne 不相等
      • -gt 大于
      • -lt 小于
      • -ge 大于等于
      • -le 小于等于
    • 布尔运算符

      • ! 非运算
      • -o 或运算
      • -a 与运算
    • 逻辑运算符

      • && 逻辑AND
      • || 逻辑OR
    • 字符串运算符

      • = 两个字符串相等返回true
      • != 两个字符串不等返回true
      • -z 长度为0返回true
      • -n 长度不为0返回true
      • $ 不为空返回true
  7. echo

    • 显示普通字符串 echo “It is a test”
    • 显示转义字符串 echo “\“It is a test\””
    • 显示变量 echo $val
    • 显示换行 echo -e “OK! \n” -e 开启转义
    • 显示结果定向至文件 echo “It is a test” > myfile
    • 显示命令执行结果 echo 反引号内
  8. 流程控制

    • if语句

      • if 语句语法格式:

        if condition
        then
            command1 
            command2
            ...
            commandN 
        fi
        
      • 写成一行(适用于终端命令提示符):

        if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
        
      • if注意:条件用方括号括起来,与if和内部条件语句均有空格;if和elif条件后加then;结尾以fi结尾;展开写不需要加;终端模式用;分隔.

    • for语句

      • for循环一般格式为:

        for var in item1 item2 ... itemN
        do
            command1
            command2
            ...
            commandN
        done
        
      • for中命令可为任何有效的 shell 命令和语句。in 列表可以包含替换、字符串和文件名。

      • for循环还有一种C语言风格的语法,常用于计数、打印数字序列:
        for (( expr1 ; expr2 ; expr3 )) ; do list ; done

      • for注意:for中条件后以do开始,done结束

    • while语句

      • while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:

        while condition
        do
            command
        done
        
      • 可以配合let命令,let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量

        #!/bin/bash
        int=1
        while(( $int<=5 ))
        do
            echo $int
            let "int++"
        done
        
    • case … esac多选择语句

      • 每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

      • 可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

        case … esac 语法格式如下:

        case 值 in
        模式1)
            command1
            command2
            ...
            commandN
            ;;
        模式2)
            command1
            command2
            ...
            commandN
            ;;
        esac
        
      • 注意:取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配不到时,可以用*捕获该值。

      • 跳出循环

        • break命令允许跳出所有循环(终止执行后面的所有循环)
        • continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环
  9. shell函数

  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

  • shell中函数的定义格式如下:

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }
    

    说明:

    • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
    • 函数返回值在调用该函数后通过 $? 来获得。调用函数仅使用其函数名即可。
    • 调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
    • $10 不能获取第十个参数,获取第十个参数需要​${10}。当n>=10时,需要使用${n}来获取参数
  1. 输入输出重定向
  • command > file 将输出重定向到 file
  • command >> file 将输出以追加的方式重定向到 file
  • command1 < file1 本来需要从键盘获取输入的命令会转移到文件读取内容
  • command1 < infile > outfile 同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中
  1. Shell test 命令
  • shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

  • 例:

    num1=100
    num2=100
    if test $[num1] -eq $[num2]
    then
        echo '两个数相等!'
    else
        echo '两个数不相等!'
    fi
    

    代码中的 [] 执行基本的算数运算

  1. 其他
  • 单引号是告诉Shell忽略特殊字符,而双引号则解释特殊符号原有的意义
  • $()放的是命令,和反引号作用一样,${}放的是变量,起到一个边界作用,$(())作整数运算,[]和test是等同的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值