目录
1 echo
在屏幕上显示一段文字或指定内容
-n 不换行输出
配合 -e 使用:(-e:让\后面的字符有特殊作用==》转义功能)
\t 表示一个tab键
\n 表示换行
[root@localhost 0324]# echo "hello\tworld"
hello\tworld
[root@localhost 0324]# echo -e "hello\tworld"
hello world
[root@localhost 0324]# echo -e "hello\nworld"
hello
world
1.1 在shell编程的主要作用
- 输出变量和字符串
- 写菜单
2 shell写函数
【示例】
《需求》输入不同数字有不同功能。1==》add ; 2==》sub ; 3==》mul ; 4==》exit
《实现》使用shell写函数,一个功能一个函数,例如输入1,就调用add函数
1. if分支
2. 或case
[root@localhost 0324]# vim compute.sh
[root@localhost 0324]# cat compute.sh
#!/bin/bash
#编写菜单
echo "=============================="
echo -e "1.add\t加法"
echo -e "2.sub\t减法"
echo -e "3.mul\t乘法"
echo -e "4.exit\t退出"
echo "=============================="
#接受用户输入
recv(){
read -p "请输入第1个数字:" num1
read -p "请输入第2个数字:" num2
}
#加法函数
add(){
recv
result=$((num1 + num2))
echo "$num1 + $num2 = $result"
}
#减法
sub(){
recv
result=$((num1 - num2))
echo "$num1 - $num2 = $result"
}
#乘法
mul(){
recv
result=$((num1 * num2))
echo "$num1 * $num2 = $result"
}
#接受用户输入
read -p "请输入你的选择:" option
#根据用户输入选择执行对应的函数
case $option in
1)
add
;;
2)
sub
;;
3)
mul
;;
4)
exit
;;
*)
echo "请输入1-4之间的数字"
exit
;;
esac
[root@localhost 0324]# bash compute.sh
==============================
1.add 加法
2.sub 减法
3.mul 乘法
4.exit 退出
==============================
请输入你的选择:1
请输入第1个数字:1
请输入第2个数字:2
1 + 2 = 3
2.1 (())
用途:整数运算和比较
在双圆括号内使用变量可以不使用$符号
[root@localhost ~]# a=10
[root@localhost ~]# b=20
[root@localhost ~]# echo $(($a + $b))
30
[root@localhost ~]# echo $((a+b))
30
[root@localhost 0324]# echo $((2>4))
0
[root@localhost 0324]# echo $((6>4))
1
2.2 [[]]
字符串的比较
[root@localhost 0324]# vim test.sh
[root@localhost 0324]# cat test.sh
read -p "请输入你的名字:" name
#注意最里面的中括号两边要空格,其中的双等号可以换位一个等号但不推荐。
if [[ $name == "root" ]]
then
echo "welcome to login"
else
echo "请输入正确的用户名"
fi
[root@localhost 0324]# bash test.sh
请输入你的名字:d
请输入正确的用户名
[root@localhost 0324]# bash test.sh
请输入你的名字:root
welcome to login
3 ⭕case
3.1 基本语法
add 调用add函数
;; 表示语句结束
* 表示通配符
esac 是case配套的结束符号
自上而下运行
可以不缩进,但是缩进跟适合查看
case $option in
1)
add
;;
2)
sub
;;
3)
exit
;;
*)
echo "请输入1-4之间的数字"
exit
;;
esac
3.2 | 或者
【代码含义】输入a或b或c都是执行add函数
case $option in
a|b|c)
add
;;
esac
3.3 如何表示范围
[集合] 每次都只是取其中一个
[a-z] 表示小写字母a到z
[A-Z] 表示大写字母A到Z
[0-9] 表示数字0到9
[a-Z] 表示26个小写字母和26个小写字母
[0-Z] 表示数字0到9和26个小写字母和26个小写字母
* 表示任意字符
case语句适合固定字符串的情况的匹配
如果是一段范围的数字情况,就不太方便,使用if的多分枝比较方便
【解释】
8[5-9] 表示第一位8固定,第二位是从5到9中的一个,整个表达式即为85到89
85到100为优秀,60到84
4 如何向文件里传递参数(位置变量、read)
【shell里】
- read
- 位置变量(更常用)
- 导入文件:while
【python】
- input
- 文件IO
- 位置变量 sys.argv
(sys模块是专门对python进行处理的模块。)
(os模块就是专门对操作系统进行处理的模块 operating system)
(模块:就是一个.py的文件,里面有许多函数,有很多功能,类似c语言里的库)
4.1 shell位置变量
$0 表示文件名
$# 表示位置变量数量
$* 表示所有位置变量的内容
[root@localhost 0324]# vim position.sh
[root@localhost 0324]# cat position.sh
echo "第1个位置变量 $1"
echo "第2个位置变量 $2"
echo "第3个位置变量 $3"
echo "第4个位置变量 $4"
echo "第5个位置变量 $5"
echo "第6个位置变量 $6"
echo "所有的位置变量的内容:$*"
echo "位置变量的数量:$#"
echo "脚本的文件名:$0"
[root@localhost 0324]# bash position.sh lihua lihong xiaomei hanmeimei xiaoming fanyouyou fengtingting
第1个位置变量 lihua
第2个位置变量 lihong
第3个位置变量 xiaomei
第4个位置变量 hanmeimei
第5个位置变量 xiaoming
第6个位置变量 fanyouyou
所有的位置变量的内容:lihua lihong xiaomei hanmeimei xiaoming fanyouyou fengtingting
位置变量的数量:7
脚本的文件名:position.sh
4.2 位置变量和case结合
[root@localhost 0324]# vim case.sh
[root@localhost 0324]# cat case.sh
#!/bin/bash
case $1 in
start)
echo "启动程序"
;;
stop)
echo "关闭程序"
;;
restart|reload)
echo "重启程序"
;;
*)
echo "请检查输入是否正确"
;;
esac
[root@localhost 0324]# bash case.sh
请检查输入是否正确
[root@localhost 0324]# bash case.sh stop
关闭程序
[root@localhost 0324]# bash case.sh start
启动程序
[root@localhost 0324]# bash case.sh restart
重启程序
[root@localhost 0324]# bash case.sh r
请检查输入是否正确
4.3 python位置变量
sys.argv为列表的格式,相当于shell里的$*,为全部位置变量
argv --- arguments variables
[root@localhost 0325]# vim position.py
[root@localhost 0325]# cat position.py
import sys
#直接输出位置变量
#sys.argv表示所有的位置变量==》相当于shell里的$*
print(sys.argv)
print("#" * 50)
#使用for循环一个一个输出位置变量
for i in sys.argv:
print(i)
[root@localhost 0325]# python3 position.py liu zhao feng chen quan
['position.py', 'liu', 'zhao', 'feng', 'chen', 'quan']
##################################################
position.py
liu
zhao
feng
chen
quan
5 :set paste
在末行模式输入,可以从外面粘贴进入vim
【步骤】:set paste ==》按i进入插入模式,再右击粘贴
保证粘贴到vim编辑里的内容不乱
6 while
6.1 使用while循环控制循环次数
[root@localhost 0324]# vim while.sh
[root@localhost 0324]# bash while.sh
变量i的值为1
变量i的值为2
变量i的值为3
变量i的值为4
变量i的值为5
变量i的值为6
变量i的值为7
变量i的值为8
变量i的值为9
变量i的值为10
[root@localhost 0324]# cat while.sh
i=1
while((i <= 10))
do
echo "变量i的值为$i"
sleep 1
#自增条件非常重要,防止死循环
((i++))
done
6.2 使用while实现死循环
无限循环的三种写法,使用break跳出循环,但不会结束脚本,程序会继续执行。exit是跳出程序
【注】true是小写
while : while true while [1]
while :
while true
while [1]
6.3 利用while导入文件内容
[root@localhost 0324]# cat student_info.txt
name age sex grade
cali 36 m 80
lihua 18 m 90
hanmei 25 f 85
liyu 22 f 93
while循环会一行一行导入student_info.txt文件里的内容,然后赋值给4个变量name age sex grade。
变量名可以和导入文件里的字段不同。
[root@localhost 0324]# cat while_v3.sh
#!/bin/bash
#方法一导入
while read name age sex grade
do
echo -e "名字是$name \t性别是$sex \t年龄是$age \t分数为$grade"
done < student_info.txt
echo
echo "***********************"
echo
#方法2:导入
cat student_info.txt | while read name age sex grade
do
echo -e "名字是$name \t性别是$sex \t年龄是$age \t分数为$grade"
done
[root@localhost 0324]# bash while_v3.sh
名字是name 性别是sex 年龄是age 分数为grade
名字是cali 性别是m 年龄是36 分数为80
名字是lihua 性别是m 年龄是18 分数为90
名字是hanmei 性别是f 年龄是25 分数为85
名字是liyu 性别是f 年龄是22 分数为93
***********************
名字是name 性别是sex 年龄是age 分数为grade
名字是cali 性别是m 年龄是36 分数为80
名字是lihua 性别是m 年龄是18 分数为90
名字是hanmei 性别是f 年龄是25 分数为85
名字是liyu 性别是f 年龄是22 分数为93
也可以将整行给一个变量赋值
[root@localhost 0324]# cat while.sh
while read line
do
echo $line
done < student_info.txt
[root@localhost 0324]# bash while.sh
name age sex grade
cali 36 m 80
lihua 18 m 90
hanmei 25 f 85
liyu 22 f 93
6.4 练一下
【shell答案】
【python答案】
【python答案】
7 read、clear
read 实现让程序停顿在某些地方
clear 清屏
[root@localhost 0324]# cat whilev2.sh
menu(){
echo "======================="
echo "1.增加用户并且设置密码"
echo "2.删除用户"
echo "3.查看用户"
echo "4.退出"
echo "======================="
read -p "请输入你的选择:" option
}
while :
do
menu
case $option in
1)
echo "增加用户"
;;
2)
echo "删除用户"
;;
3)
echo "查询用户"
;;
4)
exit
;;
*)
echo "请输入1-4的数字"
;;
esac
read -p "请按Enter键继续"
clear
done
8 read同时接受多个变量
可以同时接受多个值,然后赋给多个变量
9 if 多条件判断
9.1 &&
两个条件都要满足
【示例】
【执行结果】
9.2 ||
满足一个即可