前言
#!
声明脚本的解释器
#!/bin/bash
变量
无需声明类型可以直接使用,空格之间不能加空格。$变量名
引用变量,$1 $2
引用从外面传进来的参数。
#!/bin/bash
name=5t5
age=23 #age = 23,错误 不能有空格
echo "$name : $age"
echo "$1 : $2"
调用脚本:
./1.sh 5t5 23
注意:双引号引起来的一段字符中,是可以解析变量的数值的,而单引号引起来的就不可以。
拿到命令
可以使用:$(命令)
的方式来直接拿到某些命令的结果,如:
#!/bin/bash
path=$(pwd)
echo $path
运算符
算数运算符
使用$((算数表达式))
,可以求出一个算数表达式的值。
#!/bin/bash
a=2
b=4
echo $(($a + $b)) #输出6
echo $(($a ** $b)) #输出16,即2的4次方
比较运算符
-eq #等于
-ne #不等于
-lt #小于
-le #小于等于
-gt #大于
-ge #大于等于
文件相关的判断:
-e #文件存在
-f #文件存在且是一个普通文件
-s #文件存在且非空
-d #目录存在
-r
-w
-x #检查当前用户对该文件是否有对应权限
逻辑运算符
和c语言一样
语句
条件语句
基本语法:
if [ 条件表达式 ];then #注意条件表达式两遍留空格
elif [ 条件表达式 ];then
else
fi
例1:外界传入俩数,判断大小关系:
#!/bin/bash
if [ $1 -eq $2 ];then
echo "$1 = $2"
elif [ $1 -lt $2 ];then
echo "$1 < $2"
else
echo "$1 > $2"
fi
例2:外界传入一个文件名,判断该文件是否存在
#!/bin/bash
if [ -e $1 ];then
echo "$1存在"
else
echo "$1不存在"
fi
例3:外界传入一个文件名,判断该文件是否存在且可写
#!/bin/bash
if [ -e $1 ] && [ -w $1 ];then
echo "$1存在且可写"
elif [ -e $1 ];then
echo "$1不可写"
else
echo "$1不存在"
fi
循环语句
shell
中支持三种循环语句:while
、for
、until
for
基本语法:
for 变量名 in 集合
do
done
使用示例:
#!/bin/bash
for name in rina sova jett sage clove
do
echo $name
done
输出为:
rina
sova
jett
sage
clove
实际上就是让name
遍历了集合rina sova jett sage clove
。
如果是数字,可以使用seq
指令生成一个数字集合,如seq 1 10
,就可以生成一个1到10的数字集合。
示例:打印一个1-100的结果:
#!/bin/bash
for i in $(seq 1 100)
do
echo -n "$i " #-n可以不空格输出
done
例子:写一个脚本,判断一个路径下所有的文件是目录还是一般文件
#!/bin/bash
for i in $(ls $1)
do
if [ -d "$1/$i" ];then
echo "$i:目录"
elif [ -f "$1/$i" ];then
echo "$i:文件"
fi
done
while和until
基本语法:
while [条件表达式]
do
done
until [条件表达式]
do
done
while
和until
基本一致,while
就是C语言中的while
,即表达式成立即循环,不成立即跳出循环,而until
恰好相反,表达式不成立则循环,成立则跳出循环。
例子:使用 while 打印1加到100:
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
sum=$((sum + i))
i=$((i + 1))
done
echo "sum:$sum"
函数
基本语法:
function()
{
}
函数的调用:
#!/bin/bash
add() #函数名
{
echo $(($1 + $2)) #将传入的两个参数加起来返回
}
echo $(add 4 7) #调用子函数
※子函数的echo
其实是返回值。
子函数内部可以定义临时变量,但需要使用local
关键字
add()
{
local num1=$1
local num2=$2
echo $(($num1 + $num2))
}
除了使用echo
返回外,函数也跟C一样可以使用return
语句返回:
func()
{
return $1; #使用return语句返回
}
func 30
num=$? #用$?可以接取上一个函数调用的返回值
echo $num
返回回来的值会临时存储在$?
中,可以随时调用。
练习
留白