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多分支流程控制
- if-else方式
if [ condition ]
then
structure
elif [ condition]
then
structure
else
structure
fi
- switch-case方式
case $variety in
"value")
structure
;;
"value")
structure
;;
"value")
structure
;;
*)
structure
;;
esac
- 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之间
------ 持续更新中,敬请期待 ------