目录
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 ||
满足一个即可










