响应式网站几个断点/长沙百度
文章目录
- 一 Shell函数
- 1 两个数求和
- 2自定义函数
- 3.函数的作用范围
- 4函数的参数
- 二Shell数组
- 应用场景包括
- 数组定义方法
- 数组包括的数据类型
- Shell数组操作
- 获取数组长度
- ${数组名[@/*]}
- 读取某下标赋值
- ${数组名[下表]}
- 数组遍历
- 三Shell脚本调试
- echo命令
- bash 命令
- 命令语法
- 常用选项
- set命令
- 实操解析
- 冒泡排序
- 解析
- 排序流程
- 脚本排序
一 Shell函数
将命令序列按格式写在一起
可方便重复使用命令序列
Shell函数定义
[function] 函数名(){
命令序列
[return x]
}
调用函数的方法
函数名 [参数1] [参数2]
函数应用示例
示例1
两个数子就和
通过sum() {}定义函数
使用read命令交互输入两个数并求和
示例2
编写登录系统后便可使用的用户自定义函数
编写用户自定义函数文件/root/function
在当前Shell中加载可执行的函数文件/root/function
在~/.bashrc文件中添加source /root/function命令
1 两个数求和
I root@localhost~ ]# vim sum. sh
#!/bin/bash
sum() {
read -p"请输入第一个数:"NUM1
read -p"请输入第二个数:"NUM2
echo "你输入的两个数为: $NUM1 和$NUM2 "SUM=(( $NUM1 +$NUM2))
echo "两个数的和为: $SUM"
}
sum
root@localhost~l # chmod +x sum. sh
I root@localhost~ ]# . /sum. sh
请输入第一个数: 2
请输入第二个数: 3
“你输入的两个数为: 2和3.”
“两个数的和为: 5
2自定义函数
[root@localhost~]#vim function
servicectl_usage (){
echo "Usage:service <service-name> <start|stop|restart|reloadstatus>"
return 1
}
chk_centos_ver () {
grep "CentOS.*release 7." /etc/centos-release &>
/dev/null && echo "7"
grep "CentOS.*release 6." /etc/centos-release &>
/dev/null && echo "6"
grep "CentOS.*release 5." /etc/centos-release &>
/dev/null && echo "5"
}
servicectl () {
[[ -z $1 || -z $2 ]] && servicectl_usage
[ $(chk_centos_ver)=="7" ] && systemctl $2
${1}. service || service $1 $2
}
[root@localhost~]#chmod +x function
[root@localhost~]#source function
[root@localhost~]#echo 'source /root/function' >> ~/.bashrc
3.函数的作用范围
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
示例
函数内部变量通过local来实现
通过定义myfun函数,在其内部设置局部变量i
函数内部和外部分别赋值,进行结果验证
[ root@localhost~ ]# vim fun_ _scope. sh
myfun ()
{
local i
i=8
echo $i
}
i=9
myfun
echo $i
root@localhost # chmod +x fun_ scope. sh
[root@localhost ]# . / fun_ scope. sh
8
9
4函数的参数
参数的用法
函数名称 参数1 参数2 参数3 …
参数的表示方法
$1 $2 3.......3.......3.......{10}${11}…
示例
通过函数参数将日志信息写入文件
通过定义appendfile函数实现
[ root@localhost~ ]#vim write_log.sh
#!/bin/bash
mydir="/data" outfile="${mydir}/my.log"
[ -e " ${mydir}"] || mkdir -p $ {mkdir}
appendfile()
{
echo "$2" >> "$1"
}
appendfile ${outfile} "first line content."
appendfile ${outfile} "second line content."
[ root@localhost~ ]# chomd +x write_log.sh
[ root@localhost~ ]# ./write_log.sh
5递归函数
调用自己本身的函数
示例
递归遍历目录
通过定义递归函数list_files来实现
[ root@localhost~ ]# vim fun_recursion.sh
function list_files()
{
for f in 'ls $1';
do
if [ -d "$1/$f" ] ;
then echo "$2$f"
list_files "$1/$f" " $2"
else
echo "$2$f"
fi
done
}
list_files "/var/log" ""
[ root@localhost~ ]# chomd +x fun_recursion.sh
二Shell数组
应用场景包括
获取数组长度
获取元素长度
遍历元素
元素切片
元素替换
元素删除
…
数组定义方法
方法一
数组名= (value0 value1 value2 …)
方法二
数组名= ([0]=value [1]=value [2]=value…)
方法三
列表名=“value0 value1 value2…”
数组名=($列表名)
方法四
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
数组包括的数据类型
数值类型
字符类型使用""或''定义
Shell数组操作
获取数组长度
${数组名[@/*]}
读取某下标赋值
${数组名[下表]}
数组遍历
[root@localhost ~]# arr_number=(1 2 3 4 5);
[root@localhost ~]# arr_ length=${#arr_ number[*]}
[root@localhost ~]# echo $arr_ length
5
[root@localhost ~]# arr index2=${arr_ number[2]}
[root@localhost ~]# echo $arr_ index2
3
[root@localhost ~]# for v in ${arr_ number[@]}
> do
> echo $v
> done
1
2
3
4
5
[root@centos-7~]arr=(1234 5)
[root@centos-7~]# echo ${arr[@]}
1 2 3 4 5
[root@centos-7~]# echo ${arr[@:0:2}
1 2
[root@centos-7~]# echo ${arr[@:2:3}
3 4 5
[root@centos-7 ~]# arr=(1 2 3 4 5)
[root@centos-7 ~]# echo ${arr[@]4/66}
1 2 3 66 5
[root@centos-7 ~]# echo ${arr[@]}
1 2 3 4 5
[root@centos-7 ~]# arr=(${arr[@]/4/66})
[root@centos-7 ~]# echo ${arr[@]}
1 2 3 66 5
[root@centos-7 ~]# arr=(1 2 3 4 5)
[root@centos-7 ~]# unset arr
[root@centos-7 ~]# echo ${arr[*]}
[root@centos-7 ~]# arr=(1 2 3 4 5)
[root@centos-7 ~]# unset arr[2]
[root@centos-7 ~]# echo ${arr[*]}
1 2 4 5
三Shell脚本调试
echo命令
bash 命令
命令语法
sh [-nux] 脚本名
常用选项
-n、-v、-x
shell [-nvx] 脚本名
-n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提示报错。
-v: 在执行脚本时,先将脚本的内容输出到屏幕E然后执行脚本,如果有错误,也
会给出错误提示。
-x:
将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。
set命令
set -x:开启调节模式
set +x:关闭调节模式
实操解析
[root@server2 ~]# vi grade1.sh
[root@server2 ~]# chmod +x grade1.sh
[root@server2 ~]# ./grade1.sh
#!/bin/bash
set -x //开启调试模式
read -p"请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100]
then
echo "$GRADE 分!优秀"set +x //关闭调试模式
elif [ $GRADE -ge 70] && [ $GRADE -le 84]
then
echo"$GRADE 分,合格"else .
echo "$GRADE 分?不合格"
fi
冒泡排序
解析
通过对数据循环排序,得出数值大小,进行排序
排序流程
score =(10 5 1 100 70 60)
第一轮 比较了5次
10 5 1 100 70 60
5 10 1 100 70 60 1次
5 1 10 100 70 60 2次
5 1 10 100 70 60 3次
5 1 10 70 100 60 4次
5 1 10 70 60 100 5次 得出最大数值
第二轮 比较了4次
5 1 10 70 60
1 5 10 70 60 1次
1 5 10 70 60 2次
1 5 10 70 60 3次
1 5 10 60 70 4次 得出倒数第二大数值
第三轮 比较了3次
1 5 10 60 得出倒数第三大数值
第四轮 比较了2次
1 5 10 得出倒数第四大数值
第五轮 比较了1次
1 5 得出倒数第五大数值
脚本排序
[root@server2 ~]# vi maopao.sh
[root@server2 ~]# chmod +x maopao.sh
[root@server2 ~]# ./maopao.sh
#!/bin/bash
# 冒泡排序
score=(10 5 1 100 70 60)
for ((i=1;i<${#score[*]};i++))
dofor ((j=0;j<${#score[*]}-$i;j++))doif [ ${score[j]} -gt ${score[$(($j+1))]} ]then temp=${score[j]} 中间变量score[j]=${score[$(($j+1))]}score[$(($j+1))]=$tempfidone
done
echo ${score[*]}此处[$(($j+1))]可以替换为[j+1]
以上方法较为局限,需要给定数值才可计算
键盘输入冒泡排序
[root@server2 ~]# vi maopao.sh
[root@server2 ~]# chmod +x maopao.sh
[root@server2 ~]# ./maopao.sh
#!/bin/bash
# 键盘输入冒泡排序
k=0 数组第一位元素
while true 一直继续,循环
doread -p "是否需要输入数值?" do 变量名if [ $do == "no" ] 只要不输入no就一直继续then break 退出循环firead -p "请输入第$(($k+1))个元素" keyscore[$k]=$keylet k++
donefor ((i=1;i<${#score[*]};i++))
dofor ((j=0;j<${#score[*]}-$i;j++))doif [ ${score[j]} -gt ${score[j+1]} ]then temp=${score[j]}score[j]=${score[j+1]}score[j+1]=$tempfidone
done
echo ${score[*]}