目录
【if语句】
shell脚本中的if语句基本的逻辑思想还是和C语言相同的,不同的只有语句的格式。
if语句的结束为fi,反过来。
1.if语句的第一种形式
注意
if后添加一个空格,条件的左右均有一个空格。否则会出错
检测当前目录下文件是否存在
echo "请输入文件名"
read fileName
if [ -e $fileName.txt ]; then
echo "文件存在"
else
echo "文件不存在"
fi
检测当前目录下文件是否存在,不存在则创建
如果文件存在,打开文件。否则创建
echo "请输入文件名"
read fileName
if [ -e $fileName.txt ]; then
#echo "文件存在"
cat $fileName.txt
else
#echo "文件不存在"
touch $fileName.txt
fi
2.if语句的第二种形式
elif----> eles if ----> elif
相当于C语言中的else if,并列的逻辑判断关系
并列关系下的逻辑判断
#! /bin/bash
echo "请输入Yes Or No"
read option
if [ $option = "yes" ];then
echo "选择了Yes"
elif [ $option = "no" ];then
echo "选择了No"
else
echo "其他选项"
fi
【case控制语句】
shell中的case语句判断,类比于C语言,似乎shell中的case可以判断多种类型,shell中的格式不包含switch,但是整体看还是和switch很类似的。
case的定义形式如下:
case判断输入内容
#! /bin/bash
echo "请输入选项"
read option
case $option in
"yes")
echo "输入了Yes"
;;
"no")
echo "输入了No"
;;
*)
echo "输入了其他"
exit 1
echo "测试是否退出"
esac
【for循环语句】
shell中的for循环与C语言类似,只是定义形式会有所不同罢了。
1.for循环第一种形式
for循环的第一种定义形式如下
for( i = 0; i < n ; i++)
{
....
}
与C语言的for循环进行对比后,是否会觉的很熟悉。初始值,限制值以及执行步阶是一一对应的。而do以及done对应两个大括号。
使用for循环来求和
如果不使用declare -i 定义i为整型变量,可能会出现最后得出的sum的值为0+1+2+3+4..+100,似乎sum不是被看做整数,而是看为一个类似字符串的东西拼接?
#!/bin/bash
declare -i i=0
declare -i sum=0
for(( i=0 ; i<=100 ; i++ ))
do
sum=$sum+$i
done
echo "sum为$sum"
2.for循环的第二种形式
for的第二种表达形式是之前没有见过的形式。拆分一下他的意思就是。在var分别为con1,con2,con3.....的时候执行程序段。do以及done依旧起到大括号的作用。
需要注意的是,在每个程序段如果要取对应var的值,需要给美金($var)
利用for循环的第二种形式,配合反引号解析系统命令,做到扫描当前路径文件
反引号加上ls可以把当前路径下的文件名赋值给fileName
#! /bin/bash
for fileName in `ls`
do
echo "当前文件为:$fileName"
done
扫描路径下文件并分析文件类型
通过不断获得的文件名,通过条件测试中的字符串测试来判断文件的类型。
如下代码,如果扫描到目录文件,也就是文件夹。不会判断其他类型。如果扫描到为普通文件,则使用case语句进行类型判断(只用到了脚本文件和其他文件的判断,可以适当添加,可以扫描多种文件)。
#! /bin/bash
for fileName in `ls`
do
if [ -d $fileName ];then
echo "当前文件为:$fileName 是目录文件"
elif [ -f $fileName ];then
#echo "当前文件为:$fileName 是普通文件"
case $fileName in
*.sh)
echo "$fileName 是普通文件的脚本文件"
;;
*)
echo "$fileName 是普通文件但不是脚本文件"
esac
fi
done
【while循环语句】
shell中的while循环语句整体逻辑上类似于C语言,也只是定义形式不一样。并且shell中还有一种特殊的类似于while的循环语句。
while语句是条件满足则循环,而until语句是条件不满足才循环
如下添加箭头的位置都需要添加空格,否则会出错!
【shell的函数】
shell的函数也是为了更好地封装性以及便利性以及防止shell命令的复用。shell中一般需要了解的是函数的传参以及定义形式。
shell的函数有两种形式:
一般默认使用的是格式一,格式二似乎指一种声明,可以省略。
需要注意的是,shell函数是没有返回值以及形参的
shell函数的封装
#! /bin/bash
declare -i temp
function my_add()
{
temp=$1+$2
return $temp
}
echo "请输入两个数字"
read num1 num2
my_add $num1 $num2
echo "得到的数字为:$?"
同时使用如上方法进行求和似乎会有一个问题,那就是返回的接收的值只有一个字节的大小(也就是范围为0-255)。
想要解决如上问题,可以使用Linux自带的计算器
#原本函数的返回
return $1+$2
#使用反引号解析系统命令
return `expr $1+$2 `
shell函数的跨文件调用
如何在一个脚本文件中调用另一个脚本文件中封装好的函数呢。使用source关键字
如下代码
15shell.sh封装了函数,在14shell.sh中调用
14shell.sh
#! /bin/bash
#导入15shell.sh的函数
source 15shell.sh
echo "请输入两个数字"
read num1 num2
my_add $num1 $num2
echo "得到的数字为:$?"
15shell.sh
#! /bin/bash
function my_add()
{
return `expr $1 + $2`
}