shell脚本编程

文章目录

    • 什么是shell脚本
    • shell基本语法
      • 变量
        • 变量的定义
        • 变量的使用
        • 字符串
          • 单引号与双引号的区别?
          • 获取字符串长度
          • 提取子字符串
      • 数组
        • 定义、读取数组元素
        • 获取数组中所有元素
        • 获取数组长度
      • 条件控制
        • 条件表达式
      • 循环
        • for
        • while
        • 无限循环

什么是shell脚本

shell脚本是一种为shell编写的脚本程序,和python、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
通常,我们的脚本程序以如下程序作为第一行:

#!/bin/bash

#!是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪种shell。

shell基本语法

变量

变量的定义

shell脚本中,并不区分变量类型,定义一个变量和python语法一样:

# 不支持数字开头,不能用标点符号,不能用关键字
# 合法的变量定义如下:
_num=0
num=123
num1=47
num_2=43

【注意】变量定义时,=紧接着变量,中间不能有空格;=右边的常量或者其他变量也需要紧接着=

变量的使用

使用一个定义过的变量,需要在变量名前加上$

num1=5
echo $num1

有时,我们会看到一个变量两个有{},这是做什么呢?
其实,变量两侧花括号是为了帮助解释器识别变量的边界:

echo "${i}num"

有时,我们需要对变量加上一个前缀,此时花括号的作用也就体现了出来,表明标识符i为一个变量;如果不加大括号,解释器会将inum识别为一个变量。

字符串

单引号与双引号的区别?
  • 单引号
    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
  • 双引号
    • 双引号里可以有变量
    • 双引号里可以出现转义字符

例子:

price=237
echo "This phone is $price dollars"
echo "This phone is "$price" dollars"
echo 'This phone is $price dollars'
echo 'This phone is '$price' dollars'

# 输出
This phone is 237 dollars
This phone is 237 dollars
This phone is $price dollars
This phone is 237 dollars
获取字符串长度
${#str}
提取子字符串
# 从字符串第 2 个字符开始截取 4 个字符
${str:1:4}

数组

定义、读取数组元素

bash shell只支持一位数组,初始化时不需要定义数组大小,语法如下:

arr =(v0 v1 ... vn)

使用下标定义数组元素:

arr[0]=v0
arr[1]=v1

读取数组元素同样要用到$符号:

${arr[i]}

获取数组中所有元素

有以下两种方式:

${arr[*]}
${arr[@]}

获取数组长度

有如下两种方式:

${#arr[*]}
${#arr[@]}

条件控制

条件表达式

  • [ expression ] 括号两端必须要有空格
  • [[ expression ]] 括号两端必须要有空格
  • test expression

组合测试条件:

  • -a:and
  • -o:or
  • !:not
if [ $a == $b ]
then
   echo "a = b"
elif [ $a -gt $b ]
then
   echo "a > b"
elif [ $a -lt $b ]
then
   echo "a < b"
fi
# if条件句结束标识fi

循环

for

  • 列表循环

    for i in 1 2 3 4 5
    do
    	...
    done
    # 或者
    for i in {1..5}
    do
    	...
    done
    
  • seq语句

    • seq 1000 起始默认是 1,间隔默认是1
    • seq 2 1000 间隔默认是1
    • seq 1 3 10 从1到10,间隔为3,结果是:1 4 7 10
    for in i `seq 1 5`
    do
    	...
    done
    
  • 类C语法

    for ((i = 1; i <= 5; i++))   
    do  
        ...
    done  
    

while

# 方法1
i=1
while(( $i<=5 ))
do
    ...
done

# 方法2
i=1
while [ $i -le 5 ]
do
  ...
done

无限循环

while :
while true
for(( ; ; ))

你可能感兴趣的:(linux相关)