【复盘】:shell基础语法那些事儿,你知道多少?(必看)

146 阅读1分钟

常见shell数据类型

  1. 字符串
  2. 整型
  3. 布尔值,0或1来表示

声明变量的方式

变量名 = 值

调用变量的方式为:

${变量名} 或 $变量

变量名的规则和C语言、Python等一致,不允许数字开头,仅包含数字、字母、下划线

原生Bash不支持计算,但是可以借助命令expr来实现运算功能

val=$(expr 1 + 3 ) #结果为4 这里一定要写空格,它没法解析。因为它是基于这些空格去运算的 val=expr 2 + 4 #结果为4

a=1
b=2
C=5
expr \( $a + $b \) \* $c
15

遇到以下问题,原因是Windows中换行符为而Linux中为’\r\n’,解决办法为:用vim打开文件后进入命令模式输入:set ff=unix后用命令:wq 保存退出。 image.png bash demo.sh

分支与循环

在大多数编程语言中都有条件分支语句,Shell也一样,在Shell中使用以下格式来进行条件分支

if [ $a -eq $b ]; then
    echo a=b
else
    echo a!=b
fi

1739520413491.jpg

elif [ $a -eq $b ]; then #

while 循环

while [ 条件 ]; do
    ...
done

for 循环

for i in 1 2 3 4 5
    do
        echo $i
    done

可结合seq命令的格式来进行枚举,

seq 6
seq 1 2 7
seq 5 -1 1

计算1~100中所有7的倍数的和

vi mo.sh 写入

#!/bin/bash

ans=0
for i in $(seq 1 100)
    do
        if [ $(expr $i % 7) -eq 0 ]; then
            ans=$(expr $ans + $i)
        fi
    done
echo $ans

执行 bash mo.sh

函数与数组

Bash仅支持一维数组,初始化无需定义数组大小,下标从0开始,数组用小括号表示,元素用空格分隔。

arr=(1 2 5 Hello) # 赋值

echo ${arr[0]} ${arr[1]} ${arr[2]} ${arr[3]} # 输出5
echo ${arr[*]} # 

echo ${arr[@]} # 输出所有元素

函数定义格式

function 函数名 {
    $1 $2 $3 ... $n 获取传入的参数 
    return 变量
}

$#获取参数的个数,其中function可以忽略,函数不用传入参数列表,在调用时参数个数和类型可以任意。

调用函数,用$?获取返回值:

函数名 参数1 参数2... 参数n echo "返回值:$?" # 上面调用,echo去接收一下

编写一个函数,判断一个整数是否为质数。

1739525098502.jpg