shell编程学习笔记之一--学习第四天
文章目录
- 一、说明:
- 1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
- 2、Linux下vim/vi 编辑器 命令总结
- 3、学习课件:
- 4、之前的博客:
- 二、实战演练:
- 1、Until 循环语句
- 1、语法格式
- 2、打印出从10以下的数字:
- 2、case语句:
- 1、格式:
- 2、LAMP简单提示选择菜单:
- 3、select语句:
- 1、开源系统选择:
- 2、结合LAMP做个选择菜单:
- 4、函数:(这个我看到的那个B站视频课程不对,还好有课件,看课件自己消化学习学习)
- 1、定义:
- 2、求俩个数的和
- 5、Shell 数组编程
一、说明:
打算从B站学习一下shell编程,从很多的课程视频中,挑选了一个:
B站视频地址:
打算开始学习着做着笔记:
这个需要一些Linux基础,还有vim的,如果不太熟练,可以看下我之前的整理的俩个博客:
1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
2、Linux下vim/vi 编辑器 命令总结
Linux下vim/vi 编辑器 命令总结
3、学习课件:
这个地址我直接把B站中评论下方分享的弄出来了,如果失效,可以下方评论,我把我下载的分享给你。
下载地址
4、之前的博客:
shell编程学习笔记之–学习第一天
shell编程学习笔记之–学习第二天
shell编程学习笔记之–学习第三天
二、实战演练:
1、Until 循环语句
1、语法格式
until 条件
do
action
done
直到满足条件,才退出。否则执行 action 。
2、打印出从10以下的数字:
vi untile_demo1.sh
敲入代码:
#!/bin/bash
#auto until demo1
#by authors zhaojiafu
a=10;
until [[ $a -lt 0 ]];
do
echo -e "\033[32mThe Num is $a !\033[01"
((a--))
done
2、case语句:
1、格式:
case $arg in
pattern1)
语句 1
;;
pattern2)
语句 2
;;
*)
语句 3
;;
esac
2、LAMP简单提示选择菜单:
创建sh脚本
vim case_demo.sh
敲入代码:
#!/bin/bash
# auto case demo
# by authors zjf 2019
case $1 in
Apache )
echo -e "\033[32m准备安装Apache。。。·\033[0m"
;;
Mysql)
echo -e "\033[32m准备安装Mysql。。。·\033[0m"
;;
PHP)
echo -e "\033[32m准备安装PHP。。。·\033[0m"
;;
*)
echo -e "\033[32mUsage $0 Apache|Mysql|PHP|help\033[0m"
;;
esac
执行效果:
3、select语句:
Select 一般用于选择菜单的创建,可以配合 PS3来做菜单的打印输
出信息。
1、开源系统选择:
vi select_demo.sh
敲入代码:
#! /bin/bash
#by authors zhaojiafu 2019
PS3="What you like most of the open source system?"
select i in "CentOS" "RedHat" "Ubuntu"
do
echo "You select $i"
done
运行效果:
2、结合LAMP做个选择菜单:
创建sh脚本文件
vi select_demo2.sh
敲入代码:
#! /bin/bash
#by authors zhaojiafu 2019
PS3="Select install LAMP Menu"
select i in "Apache" "Mysql" "PHP"
do
case $i in
Apache )
echo -e "\033[32m准备安装Apache。。。·\033[0m"
;;
Mysql)
echo -e "\033[32m准备安装Mysql。。。·\033[0m"
;;
PHP)
echo -e "\033[32m准备安装PHP。。。·\033[0m"
;;
*)
echo -e "\033[32mUsage $0 Apache|Mysql|PHP|help\033[0m"
;;
esac
done
执行结果:
4、函数:(这个我看到的那个B站视频课程不对,还好有课件,看课件自己消化学习学习)
1、定义:
shell 允许将一组命令集或语句形成一个可用块,这些块称为shell 函数,定义函数的格式:
function name (){
command1
........
}
name
2、求俩个数的和
先测试个简单函数的调用:
#!/bin/bash
#by authors zhaojiafu 2019
function number_one () {
echo "Url_1 1111"
number_two
}
function number_two () {
echo "Url_2 is 2222"
}
number_one
function sum(){
echo `expr $1 + $2`
}
if [[ ! -z $2 ]];then
echo `sum`
else
echo "Usage: $0 num1 num2"
fi
求和:
vi 2num.sh
敲入代码:
#!/bin/bash
#by authors zhaojiafu 2019
num1=3
num2=4
function sum(){
echo `expr $num1 + $num2`
#return `expr $num1 + $num2`
ret1=`expr $num1 + $num2`
return $ret1
}
result=`sum`
echo "the sum is ${result}"
注意点,这个我卡了好一会,
return `expr $num1 + $num2`
这个再函数中不会返回结果,需要前面给个变量,然后返回变量,或者直接
echo `expr $num1 + $num2`
shell函数中,如果没有返回return,会把echo的所有当成字符串返回。
比如下面的代码:
#!/bin/bash
#by authors zhaojiafu 2019
num1=3
num2=4
function sum(){
ret1=`expr $num1 + $num2`
echo `expr $num1 + $num2`
echo $num1
echo $num2
#return `expr $num1 + $num2`
#ret1=`expr $num1 + $num2`
#return $ret1
}
result=`sum`
echo "the sum is ${result}&&&&&&"
输出结果:可以看出,直接函数返回的结果是含有数字+回车+数字+回车+数字
的字符串。
有return,就会只返回return的结果。
比如代码:
#!/bin/bash
#by authors zhaojiafu 2019
num1=3
num2=4
function sum(){
ret1=`expr $num1 + $num2`
echo `expr $num1 + $num2`
echo $num1
echo $num2
#return `expr $num1 + $num2`
#ret1=`expr $num1 + $num2`
return $ret1
}
result=`sum`
echo "the sum is ${result}&&&&&&"
结果输出不对呀,还是和刚刚一样,这样return没有看出效果呀。
改写代码:
#!/bin/bash
#by authors zhaojiafu 2019
num1=3
num2=4
function sum(){
ret1=`expr $num1 + $num2`
echo `expr $num1 + $num2`
echo $num1
echo $num2
#return `expr $num1 + $num2`
#ret1=`expr $num1 + $num2`
return $ret1
}
#result=`sum`
#echo "the sum is ${result}&&&&&&"
sum
result=$?
echo "the sum is ${result}&&&&&&"
得到了我想要的结果,所以以后如果shell中想要函数的返回结果,还是先调用,然后使用$?得到想要的return结果。如果只是调用执行一些命令,而不需要返回结果,那就怎么样都行,只要进入函数就能执行。
5、Shell 数组编程
数组,就是相同数据类型的元素按一定顺序排列的集合,就是把 有限个类型相同的变量用一个名字命名, 然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。
创建sh脚本
vi arr1.sh
敲入代码:
#!/bin/bash
#auto arr1
#by zhaojiafu 2019
A=( "语文" "数学" "英语" "物理" "化学" )
#数组的第一个元素
echo ${A[0]}
#数组的第2个元素
echo ${A[1]}
#数组的第3个元素
echo ${A[2]}
#数组的最后一个元素
echo ${A[-1]}
#数组的所以元素1
echo "数组的所以元素1:${A[@]}"
#数组的所以元素2
echo "数组的所以元素2:${A[*]}"
# 数组的长度
echo "数组的长度:${#A[*]}"
echo "数组的长度:${#A[@]}"
运行结果:
还没有评论,来说两句吧...