shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。一般是一种.sh文件,通过"sh 文件名"或"bash 文件名"运行(带后缀)
shell脚本编程本质上就是将一群shell命令打包到一个文件中去批量运行.通过打包命令的方式,让用户不需要每次都输入一堆命令来简化使用流程.
shell中变量可以不需要定义类型,直接变量名,等于右边定义的值即可,等号两边不加空格.使用的时候采用"$变量名"或"${变量名}“的方式获取变量值.建议使用后者,可以用来区分后面部分是变量名的一部分还是属于其他部分(看代码颜色也看得出来).
shell中可以直接在运行脚本的命令后面加上变量来作为脚本的输入(空格区分不同多个输入),脚本内通过”$数字"或"${数字}"的方式来获取第N个参数,从1开始,也推荐使用后者.
#!/bin/bash
num1=3
num2=4
echo "num1:$num1 num2:$num2"
echo "num1:$num1num2:$num2"
echo "num1:${num1}num2:${num2}"
echo "input1:$1 input2:${2}"
第二个输出将num1num2当成是一个变量名,然后获取到空输出就为空.
使用$[基本运算表达式],在[]中间放运算的内容可以做简单的算术运算.
#!/bin/bash
num1=3
num2=4
echo $[${num1}+${num2}]
shell中的逻辑判断一般结合test命令使用
格式:fi是一定要有的,else可以没有
if test A 比较条件 B
then
业务逻辑
else
业务逻辑
fi
常用比较条件有:
参数 | 说明 |
---|---|
-eq | 等于则为真 |
= | 等于则为真 |
== | 等于则为真 |
-ne | 不等于则为真 |
!= | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
还有另外一种写法不需要结合test命令,直接用[]将判断逻辑写在内部(注意:这种写法要求参数运算符以及中括号两边都要有空格)
if [ A -eq B ]
then
业务逻辑
else
业务逻辑
fi
#!/bin/bash
num1=4
num2=4
num3=3
#写法1
if test ${num1} -eq ${num2}
then
echo "相等"
else
echo "不相等"
fi
if test ${num1} -eq ${num3}
then
echo "相等"
else
echo "不相等"
fi
#写法2
if [ ${num1} -eq ${num2} ]
then
echo "相等"
else
echo "不相等"
fi
#!/bin/bash
num1=4
num2=4
num3=3
if test ${num1} == ${num2}
then
echo "相等"
else
echo "不相等"
fi
if test ${num1} == ${num3}
then
echo "相等"
else
echo "不相等"
fi
if [ ${num1} == ${num2} ]
then
echo "相等"
else
echo "不相等"
fi
数学比较符号只有=和!=是可用的,>、<这些符号在运算的时候不会报错,但运算的结果是不符合预期的。
#!/bin/bash
num1=4
num2=4
num3=5
if test ${num1} != ${num2}
then
echo "不相等"
else
echo "相等"
fi
if test ${num1} > ${num3}
then
echo "大于"
else
echo "小于相等"
fi
if [ ${num1} < ${num2} ]
then
echo "小于"
else
echo "小于相等"
fi
shell中也像其他编程语言一样可以定义函数,不过格式上有差异。因为脚本是按照顺序执行的,所以函数的定义要在调用函数的代码前面。
格式:
testFun(){
}
入参:函数的入参通过调用函数,在后面用空格隔开来传。函数内部通过"$数字"或"${}“的方式获取第N个参数,下标从1开始,和脚本传参差不多。注意:大于等于第十个参数需要用”${}"的方式才能获取到参数值。
返回值:函数的函数值不需要在函数中定义,需要就返回。没有手动返回值也有默认返回值。在函数调用外层调用完函数之后使用$?获取函数返回值.
#!/bin/bash
num1=4
num2=4
num3=5
testFun(){
sum=$[$1+${2}]
return ${sum}
}
testFun 1 2
echo "sum:$?"
输入输出重定向,听起来挺迷惑人的。但简单来说就是,按照原本的命令执行,会在控制台打印东西的就叫输出。在控制台或者文件输入到程序的就是输入。
而重定向就是指把原本要打印在控制台的数据,不再打印到控制台,而是传输到其他地方。
比如:
echo “hello world” > hello
这条命令可以分成两部分,第一部分是前面的echo “hello world”,如果只执行这部分命令,会在控制台打印hello world,而在后面加上> hello之后,就是将本应输出在控制台的输出,重定向(写入)hello文件中。(文件不存在则创建文件并写入,文件存在则覆盖掉之前的内容)
#!/bin/bash
echo "hello world" > hello