【Linux】(15)shell编程基础命令:echo、case、位置变量、while、read

目录

1 echo

        1.1 在shell编程的主要作用

2 shell写函数

        2.1 (())

        2.2 [[]]

3 ⭕case

        3.1 基本语法

        3.2 | 或者

        3.3 如何表示范围

4 如何向文件里传递参数(位置变量、read)

        4.1 shell位置变量

        4.2 位置变量和case结合

        4.3 python位置变量

5 :set paste

6 while

        6.1 使用while循环控制循环次数

        6.2 使用while实现死循环

        6.3 利用while导入文件内容

        6.4 练一下

         【shell答案】

         【python答案】

         【python答案】

7 read、clear

8 read同时接受多个变量

9 if 多条件判断

        9.1 &&

        9.2 ||


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编程的主要作用

  1. 输出变量和字符串
  2. 写菜单

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里】

  1. read
  2. 位置变量(更常用)
  3. 导入文件:while

【python】

  1. input
  2. 文件IO
  3. 位置变量 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 ||

满足一个即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值