LinuxShell编程学习札记

2022-10-15
预计阅读时间:3分钟
# shell脚本开头
#!/bin/bash
  • 使用$n变量得到执行脚本时输入的第n个参数

  • 使用$#变量拿到执行脚本时输入的参数个数

  • 使用$*$@获取执行脚本输入的所有参数(其中$*将所有参数当做一个整体)

  • 使用$?查看最后一条命令的执行情况,返回0表示上条命令正确执行;如果该变量的值非0,则证明上条命令执行不正确

  • 使用$(())或者$[]运算符进行参数之间的运算

1.条件判断:

[ condition ]或者 test condition[]中条件非空即为true,例如:[ all ]true[ ]false

–常见的判断条件–

两个整数之间的判断:等于(-eq)、不等于(-ne)、大于(-gt)、小于(-lt)、大于等于(-le)、小于等于(-ge)

按照文件权限进行判断:是否具有可读权限(-r)、是否具有可写权限(-w)、是否具有可执行权限(-x)

按照文件属性进行判断:是否为文件(-f)、是否为目录(-d)、是否存在(-e)

1.1单分支流程控制

# 语法
if [ conditon ]; then
	structure
fi

# 或者	
if [ conditon ]
then
	structure
fi

# 举例
if [ $1 -gt 18 ] && [ $1 -lt 35 ]; then echo ok
fi
# 或者以下方式,其中-a表示and,-o表示or
if [ $1 -gt 18 -a $1 -lt 35 ]; then echo ok
fi

1.2多分支流程控制

  1. if-else方式
if [ condition ]
then
	structure
elif [ condition]
then
	structure
else
	structure
fi
  1. switch-case方式
case $variety in
"value")
structure
;;
"value")
structure
;;
"value")
structure
;;
*)
structure
;;
esac
  1. for循环方式
for((初始值;循环控制条件;变量变化))
do
	structure
done

下面给出示例(递归求和):

#!/bin/bash
# 使用for循环进行求和
sum=0
for((i=0;i<=$1;i++))
do
	sum=$[$sum + $i]
done
echo $sum

# 使用while方式进行求和
a=1
while[ $a -le $1 ]
do 
	sum2=[$sum2 + $a]
	a=$[$a + 1]
	#或者let sum2+=a
	#或者let a+=1
done
echo $sum2
for os in Linux Windows macOS; do echo $os; done

下面的{1..n}表示一个序列

for	i in {1..100}; do sum=$[$sum+$i]; done; echo $sum

$*$@没有被引号引起来的时候作用完全一样;在两者被引号引起来的时候(在for循环中),$*会将所有变量当做1个变量输出,而$@ 会逐一输出所有的变量

  • 读取控制台输入

read

[-p] : 控制台提示内容

[-t] :控制台持续时间

#!/bin/bash
read -t 10 -p "please input your name:" name
echo "welcome, $name!"

2.系统函数

在脚本编写过程中如果需要调用系统函数则需要使用$()进行命令替换

basename: 用来获取文件名称,可以添加[suffix]参数来将文件名中的后缀名称去掉

# 获取某文件的文件名称
basename /home/test.sh .sh

dirname: 获取文件所在的目录(针对当前输入来输出文件所在的路径,输出会将输入的最后一个/去掉)

#!/bin/bash
# 输出当前文件所在的绝对路径
echo path=$(cd $(dirname $0); pwd)

3.自定义函数

> **语法:**[function]  funname[()]
>
> {
>
> ​	Action;
>
> ​	[return int;]
>
> }
>
> **注:**function返回值范围只能在0~255之间

						           ------ 持续更新中,敬请期待 ------