常见shell数据类型
- 字符串
- 整型
- 布尔值,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保存退出。bash demo.sh
分支与循环
在大多数编程语言中都有条件分支语句,Shell也一样,在Shell中使用以下格式来进行条件分支
if [ $a -eq $b ]; then
echo a=b
else
echo a!=b
fi
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去接收一下
编写一个函数,判断一个整数是否为质数。