一、shell变量
定义变量语法:
变量名=值 # 等号两边不能有空格
示例:
#!/bin/bash
name="Alice"
echo "Hello, $name!" # 使用变量
使用变量-语法:
两种方式:
第一种:${变量名}
第二种:$变量名
示例:
代码示例:1 #! /bin/bash2 3 #定义变量的方式有两种4 #第一种:${变量名}5 name="Tom"6 echo "你好呀!${name}"7 8 #第二种:$变量名9 echo "你好呀!$name"
二、shell的数据类型
1.字符串
基本语法:
定义:str=”hello shell”
长度:${#str}
切片:${str:1:4}
代码示例:
#! /bin/bash
#定义字符串并赋值
str="I LOVE Shell!"
#取值
echo "str:${str}"
#获取长度
echo "Length the str is ${#str}"
#获取字符串的切片
echo "str[1:6] is ${str:1:6}"
运行效果:
2. 数组
基本语法:
定义: arr=(vl v2 v3 v4 v5 v6)
通过索引获取元素: ${arr[0]}
获取列表所有元素:${arr[*]}
获取列表的长度:${#arr[*]}
代码示例:
1 #! /bin/bash
2
3 #定义一个数组
4 zoo=(
5 Dog
6 pig
7 Monkey
8 Panda
9 lion
10 )
11 #输出所有元素:${变量名[*]}
12 echo "All Animal are ${zoo[*]}"
13 #输出数组长度(数组中元素的个数):${#变量名[*]}
14 echo "Length the zoo is ${#zoo[*]}"
15 #输出某个元素:${变量名[n]} n<=数组的长度-1
16 n=3
17 echo "zoo的第${n}个元素是:${zoo[$[n]]}"
18 #组合应用:
19 echo "zoo的最后一个元素是:${zoo[((${#zoo[*]})-1)]}"
运行结果:
三、shell的逻辑判断
1.if else
基本语法:
if [ 条件 ]; then命令
elif [ 条件 ]; then命令
else命令
fi
示例:
#!/bin/bash
echo "请输入一个数字:"
read numif [ $num -gt 10 ]; thenecho "这个数字大于10"
elif [ $num -eq 10 ]; thenecho "这个数字等于10"
elseecho "这个数字小于10"
fi
运行结果:
请输入一个数字:
8
这个数字小于10
** 补充:文件目录的判断 **
1 #! /bin/bash
2
3 path=$1
4
5 #-e 判断文件是否存在
6 if [ -e $path ]
7 then
8 echo "$path 存在"
9 else
10 echo "$path 不存在"
11 fi12 #-f 判断是否是文件
13 if [ -f $path ]
14 then
15 echo "$path 是文件"
16 else
17 echo "$path 不是文件"
18 fi 19 #-d 判断是否是目录
20 if [ -d $path ]
21 then
22 echo "$path 是目录"
23 else
24 echo "$path 不是目录"
25 fi
运行结果:
if else小结
表达式使用: condition 和中括号之间,一定要有空格
2.case
语法:
case $变量名 in
"值 1") 操作;;
esac
四、shell的循环
1. for循环
for val in ${list[*]}:
docommandcommand
done
代码示例:
1 #! /bin/bash
2
3 list=(
4 service1
5 service2
6 service3
7 service4
8 service5
9 )
10
11 for service in ${list[*]}
12 do
13 echo "检查服务:${service}"
14 done
运行结果:
2. while循环
语法:
while condition
docommandcommand
done
五、shell函数
1. 语法:
[ function ] funname [()]{action;[return int;]}
说明:
- 1、可以带 function fun() 定义,也可以直接 fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255).
2. 代码示例:
#!/bin/bashdemoFun(){echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
输出结果:
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----
下面定义一个带有 return 语句的函数:
代码示例:
#!/bin/bashfunWithReturn(){echo "这个函数会对输入的两个数字进行相加运算..."echo "输入第一个数字: "read aNumecho "输入第二个数字: "read anotherNumecho "两个数字分别为 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
输出结果:
这个函数会对输入的两个数字进行相加运算...
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
注意: return 语句只能返回一个介于 0 到 255 之间的整数,而两个输入数字的和可能超过这个范围。
要解决这个问题,您可以修改 return 语句,直接使用 echo 输出和而不是使用 return:
funWithReturn(){echo "这个函数会对输入的两个数字进行相加运算..."echo "输入第一个数字: "read aNumecho "输入第二个数字: "read anotherNumsum=$(($aNum + $anotherNum))echo "两个数字分别为 $aNum 和 $anotherNum !"echo $sum # 输出两个数字的和
}
六、函数参数
在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
1. 带参数的函数示例:
#!/bin/bashfunWithParam(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $10 !"echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数:
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |