SHELL编程之CASE语句+函数+正则
case语句
- 一、case语句
- 案例1
- 案例2
- 课堂练习1
- 二、函数
- 2.1 函数定义
- 2.2 函数的调用
- 2.3 应用案例
- 三、综合案例
- 四、正则表达式
- 1. 什么是正则表达式
- 2. 第一类正则
- 3. 第二类正则
- 4. 课堂作业
- 五、正则总结
- 六、课后作业
一、case语句
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相
匹配的命令。
case var in 定义变量;var代表是变量名
pattern 1) 模式1;用 | 分割多个模式,相当于orcommand1 需要执行的语句;; 两个分号代表命令结束
pattern 2)command2;;
pattern 3)command3;;*) default,不满足以上模式,默认执行*)下面的语句command4;;
esac esac表示case语句结束
案例1
- 当给程序传入start、stop、reload三个不同参数时分别执行相应命令。
#!/bin/bash
case $1 instart|S)echo "service is running....";;stop|T)echo "service is stoped...";;reload|R)echo "service is restart...";;*)echo "请输入你要的动作";;
esac
- 脚本提示让用户输入需要管理的服务名,然后提示用户需要对服务做什么操作,如启动,关闭,重启等
#!/bin/bash
read -p "请输入需要管理的服务名称(vsftpd):" service
case $service invsftpd)read -p "请输入要操作的动作:" actioncase $action instart|S)service vsftpd start;;stop|P)service vsftpd stop;;reload|restart|R)service vsftpd reload;; esac;;httpd)echo "apache is running...";;*)echo "请输入需要管理的服务名称(vsftpd):";;
esac
案例2
模拟一个多任务维护界面。当执行程序时先显示总菜单,然后进行选择后做相应维护监控操作。
h 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序分析:
1. 打印菜单
2. 等待用户输入需要的操作编号 read caseecho "h 显示命令帮助"
...cat <<EOFh 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序EOF#!/bin/bash
#打印菜单
cat <<-EOFh 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序EOF#让用户输入需要的操作
while true
do
read -p "请输入需要操作的选项[f|d]:" var1
case $var1 inh)cat <<-EOFh 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序EOF;;f)fdisk -l;;d)df -h;;m)free -m;;u)uptime;;q)exit;;
esac
done#!/bin/bash
#打印菜单
menu(){cat <<-ENDh 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序END
}
menu
while true
do
read -p "请输入你的操作[h for help]:" var1
case $var1 inh)menu;;f)read -p "请输入你要查看的设备名字[/dev/sdb]:" var2case $var2 in/dev/sda)fdisk -l /dev/sda;;/dev/sdb)fdisk -l /dev/sdb;;esac;;d)lsblk;;m)free -m;;u)uptime;;q)exit;;
esac
done
课堂练习1
- 输入一个等级(A-E),查看每个等级的成绩;如:输入A,则显示“90分~100分”,依次类推
- 模拟2人第一次相亲的场景,使用read让用户输入它的名字,性别,年龄(年龄放在性别判断后);在case里面再嵌套case菜单,使之选项更丰富。
要求:
1)
- 对性别进行判断,如果不输入男或者女,则显示”你是泰国来的吗?“
- 如果是男的,对其年龄进行判断。
2)
- 如果男的年龄大于等于18岁则显示“某某先生,你结婚了吗?”;
- 如果对方回答结了或者yes,则显示“结了你来这凑什么热闹”;
- 如果对方回答没有或者no,再次询问“那你有房有车吗?”;
- 如果既不说结了也不说没结则显示:“你到底结没结婚啊?”
- 如果回答有房有车,则显示”咱去民政局领证吧“;
- 如果回答没有,则显示“不好意思,我去下洗手间。”;
- 如果既不说有又不说没有,则显示“别浪费时间,请正面回答”。
- 如果男的年龄小于18岁,则显示“某某某你个小毛孩也来这凑热闹啦”
3)如果是女的,并且年龄大于等于18岁,则显示”某某女士你好“;否则显示”某某小姐你好“
参考:
#!/bin/bash
read -p "输入你的姓名:" name
read -p "输入你的性别:" gendercase "$gender" in男|man|male|boy )read -p "输入你的年龄:" ageif [ $age -ge 18 ];thenread -p "$name先生,你结婚了吗?" anwsercase "$anwser" in结了|有|yes )echo "结了你还来干嘛?";;没结|没有|没|no )read -p "有房有车吗?" anwser2case "$anwser2" in有)echo "咱就直接去民政局领证吧";;没有 )echo "不好意思,我去下洗手间";;* )echo "别浪费时间,请正面回答"esac;;* )echo "你到底结没结?"esacelseecho "$name小子"fi;;女|woman|female|girl|lady )read -p "输入你的年龄:" ageif [ $age -ge 18 ];thenecho "$name女士"elseecho "$name小姐"fi;;* )echo "你是泰国来的吗?"
esac该程序有个bug:如果输入年龄为负数或者0也是可以的,如何修复bug?增加一个条件:如果输入的年龄小于等于10则显示:”不跟你玩了。。。“在最后加入如下语句即可:
if [ $age -ge 18 ];thenecho "$name女士"elif[ $age -le 10 ];thenecho "不跟你玩了"exit 1elseecho "$name小姐"fi;;* )echo "你是泰国来的吗?"esac
二、函数
shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数。给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能。
2.1 函数定义
函数名()
{函数体(一堆命令的集合,来实现某个功能)
}function 函数名()
{函数体(一堆命令的集合,来实现某个功能)
}function_name() {commandcommand
}function function_name() {commandcommand
}函数中return说明:
1.return可以结束一个函数,类似于前面讲的循环控制语句break(结束当前循环,执行循环体后面的代码)
2.return默认返回函数中最后一个命令的退出状态,也可以给定参数值,该参数值的范围是0-256之间。
3.如果没有return命令,函数将返回最后一个Shell的退出值。
2.2 函数的调用
- 当前命令行调用
[root@MissHou shell04]# cat fun1.sh
#!/bin/bash
hello(){echo "hello lilei $1"
hostname
}
menu(){cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}[root@MissHou shell04]# source fun1.sh
[root@MissHou shell04]# . fun1.sh [root@MissHou shell04]# hello 888
hello lilei 888
MissHou.itcast.cc
[root@MissHou shell04]# menu
1. mysql
2. web
3. app
4. exit
- 定义到用户的环境变量中
/etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc[root@MissHou shell04]# cat ~/.bashrc
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fihello(){echo "hello lilei $1"
hostname
}
menu(){cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}注意:
当用户打开bash的时候会读取该文件
- 脚本中调用
#!/bin/bash
#打印菜单
source ./fun1.sh
menu(){cat <<-ENDh 显示命令帮助f 显示磁盘分区d 显示磁盘挂载m 查看内存使用u 查看系统负载q 退出程序END
}
menu //调用函数
2.3 应用案例
需求:写一个脚本让用户输入基本信息(姓名,性别,年龄),如不输入一直提示输入,最后根据用户的信息输出相对应的内容
思路:
- 循环直到输入字符串不为空 (该功能可以定义为一个函数,方便下面脚本调用)
- 根据用户输入信息做出匹配判断 case 语句
#!/bin/bash
#该函数实现用户如果不输入内容则一直循环直到用户输入为止,并且将用户输入的内容打印出来
input_fun()
{input_var=""output_var=$1while [ -z $input_var ]doread -p "$output_var" input_vardoneecho $input_var
}input_fun 请输入你的姓名:或者
#!/bin/bash
fun(){read -p "$1" name
if [ -z $name ];then
fun $1
else
echo $name
fi
}#调用函数并且获取用户的姓名、性别、年龄分别赋值给name、sex、age变量
name=$(input_fun 请输入你的姓名:)
sex=$(input_fun 请输入你的性别:)
age=$(input_fun 请输入你的年龄:)#根据用户输入的性别进行匹配判断
case $sex inman)if [ $age -gt 18 -a $age -le 35 ];thenecho "中年大叔你油腻了吗?加油"elif [ $age -gt 35 ];thenecho "保温杯里泡枸杞"elseecho "年轻有为。。。"fi;;woman)xxx;;*)xxx;;
esac描述以下代码含义:
:()
{:|:&
}
::(){:|:&}:
三、综合案例
任务/背景:
现有的跳板机虽然实现了统一入口来访问生产服务器,yunwei用户权限太大可以操作跳板机上的所有目录文件,存在数据被误删的安全隐患,所以希望你做一些安全策略来保证跳板机的正常使用。
具体要求:
- 只允许yunwei用户通过跳板机远程连接后台的应用服务器做一些维护操作
- 公司运维人员远程通过yunwei用户连接跳板机时,跳出以下菜单供选择:
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
h. help
q. exit
- 当用户选择相应主机后,直接免密码登录成功
- 如果用户不输入一直提示用户输入,直到用户选择退出
分析:
- 打印菜单——>定义函数 echo cat
- 让用户选择需要操作的机器 case…esac
- 配置免密登录
- 每个菜单提供功能——>case…esac用户选择做的事情
- 循环让用户输入选择
- 每个功能写成函数——>不是必须
- 脚本放的位置——>yunwei用户的家目录
#!/bin/bash
# jumper-server
# 定义菜单打印功能的函数
menu()
{cat <<-EOF
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
h. help
q. exitEOF
}while true
do
# 调用函数来打印菜单
clear
menu
# 菜单选择,case...esac语句
read -p "请选择你要访问的主机:" host
case $host in1)ssh root@10.1.1.2;;2)ssh root@10.1.1.3;;3)ssh root@10.1.1.2;;h)menu;;q)exit;;
esac
done将脚本放到yunwei用户家目录里的.bashrc里执行:
bash ~/jumper-server.sh
exit#!/bin/bash
#公钥推送成功
trap '' 1 2 3 19
#打印菜单用户选择
menu(){cat <<-EOF
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
h. help
q. exit
EOF
}#调用函数来打印菜单
menu
while true
do
read -p "请输入你要选择的主机[h for help]:" host#通过case语句来匹配用户所输入的主机
case $host in1|DB1)ssh root@10.1.1.1;;2|DB2)ssh root@10.1.1.2;;3|web1)ssh root@10.1.1.250;;h|help)clear;menu;;q|quit)exit;;
esac
done#!/bin/bash
#jumper-server
#菜单打印
trap '' 1 2 3
while true
do
cat <<-END
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
5. exit
END
#让用户选择相应的操作
read -p "请输入你要操作的主机:" host
case $host in1)ssh root@10.1.1.2;;2)ssh root@10.1.1.3;;3)ssh root@10.1.1.4;;5)exit;;*)clearecho "输入错误,请重新输入...";;
esac
done自己完善功能:
1. 用户选择主机后,需要事先推送公钥;如何判断公钥是否已推
2. 比如选择web1时,再次提示需要做的操作,比如:
clean log
重启服务
kill某个进程
补充:
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断^C
3) SIGQUIT 键盘退出
9) SIGKILL 强制终止
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止
20) SIGTSTP 暂停^Z
四、正则表达式
1. 什么是正则表达式
正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。
正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
支持正则表达式的程序如:locate |find| vim| grep| sed |awk
2. 第一类正则
- 名词解释:
元字符:指那些在正则表达式中具有特殊意义的专用字符,如:点(.) 星(*) 问号(?)等
前导字符:即位于元字符前面的字符 ab**c*** aoo**o.**
- 正则中常用的元字符
示例文本:
[root@server ~]# cat 1.txt
ggle
gogle
google
gooogle
goooooogle
gooooooogle
taobao.com
taotaobaobao.comjingdong.com
dingdingdongdong.com
10.1.1.1
Adfjd8789JHfdsdf/
a87fdjfkdLKJK
7kdjfd989KJK;
bSKJjkksdjf878.
cidufKJHJ6576,hello world
helloworld yourself
(1). 任意单个字符,除了换行符
(2)* 前导字符出现0次或连续多次 ab*能匹配“a”,“ab”以及“abb”,但是不匹配“cb”
(3).* 任意长度的字符 ab.* ab123 abbb abab
(4)^ 行的开头
(5)$ 行的结尾
(6)^$ 空行(7)[] 匹配指定字符组内的任一单个字符 [abc]
(8)[^] 匹配不在指定字符组内的任一字符 [^abc](9)^[] 匹配以指定字符组内的任一字符开头 ^[abc]
(10)^[^] 匹配不以指定字符组内的任一字符开头 ^[^abc] (11)\< 取单词的头
(12)\> 取单词的尾
(13)\<\> 精确匹配符号 grep -w 'xxx'(14)\{n\} 匹配前导字符连续出现n次 go\{2\} google gooogle
(15)\{n,\} 匹配前导字符至少出现n次
(16)\{n,m\} 匹配前导字符出现n次与m次之间 (17) \(strings\) 保存被匹配的字符将192.168.0.254 换成 192.168.1.254
vim 1.txt
:%s#\(192\.168\)\.0\.\(254\)#\1\.100\.\2 //底行模式下匹配
将10.1.1.1替换成10.1.1.254
:%s#\(10.1.1\).1#\1.254#g
:%s/\(10.1.1\).1/\1.254/g # sed -n 's#\(192\.168\)\.0\.254#\1\.1\.254#p'
找出含有192.168的行,同时保留192.168并标记为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。[root@server shell05]# sed -n 's#10.1.1.1#10.1.1.254#p' 1.txt
10.1.1.254
[root@server shell05]# sed -n 's#\(10.1.1\).1#\1.254#p' 1.txt
10.1.1.254将helloworld yourself 换成hellolilei myselfvim 1.txt
:%s#\(hello\)world your\(self\)#\1lilei my\2#g# sed -n 's/\(hello\)world your\(self\)/\1lilei my\2/p' 1.txt
hellolilei myself[root@server shell05]# sed -n 's/helloworld yourself/hellolilei myself/p' 1.txt
hellolilei myself
[root@server shell05]# sed -n 's/\(hello\)world your\(self\)/\1lilei my\2/p' 1.txt
hellolilei myself[0-9] [a-z] [A-Z] [a-zA-Z] [a-Z]
=================================================================================
Perl内置正则:
\d 匹配数字 [0-9]
\w 匹配字母数字下划线[a-zA-Z0-9_]
\s 匹配空格、制表符、换页符[\t\r\n]#grep -P '\d' test.txt
#grep -P '\w' test.txt
#grep -P '\s' test.txt
- 扩展类的正则表达式 grep -E 或则 egrep
扩展正则表达式元字符
+ 匹配一个或多个前导字符 bo+ boo bo
? 匹配零个或一个前导字符 bo? b boa|b 匹配a或b
() 组字符 hello myself yourself (my|your)self{n} 前导字符重复n次 \{n\}
{n,} 前导字符重复至少n次 \{n,\}
{n,m} 前导字符重复n到m次 \{n,m\}# grep "root|ftp|adm" /etc/passwd
# egrep "root|ftp|adm" /etc/passwd
# grep -E "root|ftp|adm" /etc/passwd# grep -E 'o+gle' test.txt
# grep -E 'o?gle' test.txt # egrep 'go{2,}' 1.txt
# egrep '(my|your)self' 1.txt[root@jumper shell06]# grep '[0-9]\{2\}\.[0-9]\{1\}\.[0-9]\{1\}\.[0-9]\{1\}' 1.txt
10.1.1.1
[root@jumper shell06]# grep '[0-9]{2}\.[0-9]{1}\.[0-9]{1}\.[0-9]{1}' 1.txt
[root@jumper shell06]# grep -E '[0-9]{2}\.[0-9]{1}\.[0-9]{1}\.[0-9]{1}' 1.txt
10.1.1.1
[root@jumper shell06]# grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 1.txt
10.1.1.1
[root@jumper shell06]# grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt
10.1.1.1
3. 第二类正则
表达式 | 功能 | 示例 |
---|---|---|
[:alnum:] | 字母与数字字符 | [[:alnum:]]+ |
[:alpha:] | 字母字符(包括大小写字母) | [[:alpha:]]{4} |
[:blank:] | 空格与制表符 | [[:blank:]]* |
[:digit:] | 数字 | [[:digit:]]? |
[:lower:] | 小写字母 | [[:lower:]]{4,} |
[:upper:] | 大写字母 | [[:upper:]]+ |
[:punct:] | 标点符号 | [[:punct:]] |
[:space:] | 包括换行符,回车等在内的所有空白 | [[:space:]]+ |
[root@server shell05]# grep -E '^[[:digit:]]+' 1.txt
[root@server shell05]# grep -E '^[^[:digit:]]+' 1.txt
[root@server shell05]# grep -E '[[:lower:]]{4,}' 1.txt
4. 课堂作业
在自己虚拟机里创建如下内容的文件:
# cat test.txt
Aieur45869Root0000
9h847RkjfkIIIhello
rootHllow88000dfjj
8ikuioerhfhupliooking
hello world
192.168.0.254
welcome to uplooking.
abcderfkdjfkdtest
rlllA899kdfkdfj
iiiA848890ldkfjdkfj
abc
12345678908374
123456@qq.com
123456@163.com
abcdefg@itcast.com23ed
要求如下:
1、查找不以大写字母开头的行(三种写法)。
2、查找有数字的行(两种写法)
3、查找一个数字和一个字母连起来的
4、查找不以r开头的行
5、查找以数字开头的
6、查找以大写字母开头的
7、查找以小写字母开头的
8、查找以点结束的
9、去掉空行
10、查找完全匹配abc的行
11、查找A后有三个数字的行
12、统计root在/etc/passwd里出现了几次
13、用正则表达式找出自己的IP地址、广播地址、子网掩码
ifconfig eth0|grep Bcast|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
ifconfig eth0|grep Bcast| grep -E -o '([0-9]{1,3}.){3}[0-9]{1,3}'
ifconfig eth0|grep Bcast| grep -P -o '\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}'
ifconfig eth0|grep Bcast| grep -P -o '(\d{1,3}.){3}\d{1,3}'
ifconfig eth0|grep Bcast| grep -P -o '(\d+.){3}\d+'# egrep --color '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=10.1.1.1
NETMASK=255.255.255.0
GATEWAY=10.1.1.254# egrep --color '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=10.1.1.1
NETMASK=255.255.255.0
GATEWAY=10.1.1.25414、找出文件中的ip地址并且打印替换成172.16.2.254
grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt |sed -n 's/192.168.0.\(254\)/172.16.2.\1/p'15、找出文件中的ip地址
grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt16、找出全部是数字的行
grep -E '^[0-9]+$' test
17、找出邮箱地址
grep -E '^[0-9]+@[a-z0-9]+\.[a-z]+$'grep --help:
匹配模式选择:
Regexp selection and interpretation:-E, --extended-regexp 扩展正则-G, --basic-regexp 基本正则-P, --perl-regexp 调用perl的正则-e, --regexp=PATTERN use PATTERN for matching-f, --file=FILE obtain PATTERN from FILE-i, --ignore-case 忽略大小写-w, --word-regexp 匹配整个单词
五、正则总结
元字符:在正则中,具有特殊意义的专用字符。. *
前导字符:元字符前面的字符叫前导字符
元字符 | 字符说明 | 示例 |
---|---|---|
* | 前导字符出现0次或者连续多次 | ab* abbbb |
. | 除了换行符以外,任意单个字符 | ab. ab8 abu |
.* | 任意长度的字符 | ab.* adfdfdf |
[] | 括号里的任意单个字符或一组单个字符 | [abc][0-9][a-z] |
[^] | 不匹配括号里的任意单个字符或一组单个字符 | [^abc] |
1 | 匹配以括号里的任意单个字符开头 | 2 |
^[^] | 不匹配以括号里的任意单个字符开头 | |
^ | 行的开头 | ^root |
$ | 行的结尾 | bash$ |
^$ | 空行 | |
\{n\}和{n} | 前导字符连续出现n次 | [0-9]\{3\} |
\{n,\}和{n,} | 前导字符至少出现n次 | [a-z]{4,} |
\{n,m\}和{n,m} | 前导字符连续出现n-m次 | go{2,4} |
\<\> | 精确匹配单词 | \<hello\> |
\(\) | 保留匹配到的字符 | \(hello\) |
+ | 前导字符出现1次或者多次 | [0-9]+ |
? | 前导字符出现0次或者1次 | go? |
| | 或 | ^root|^ftp |
() | 组字符 | (hello|world)123 |
\d | perl内置正则 | grep -P \d+ |
\w | 匹配字母数字下划线 |
六、课后作业
写一个自动搭建apache服务的脚本,要求如下:
1、用户输入web服务器的IP、域名以及数据根目录
2、如果用户不输入则一直提示输入,直到输入为止
3、当访问www.test.cc时可以访问到数据根目录里的首页文件“this is test page”
参考:
#!/bin/bash
conf=/etc/httpd/conf/httpd.conf
input_fun()
{input_var=""output_var=$1while [ -z $input_var ]doread -p "$output_var" input_vardoneecho $input_var
}
ipaddr=$(input_fun "Input Host ip[192.168.0.1]:")
web_host_name=$(input_fun "Input VirtualHostName [www.test.cc]:")
root_dir=$(input_fun "Input host Documentroot dir:[/var/www/html]:")[ ! -d $root_dir ] && mkdir -p $root_dir
chown apache.apache $root_dir && chmod 755 $root_dir
echo this is $web_host_name > $root_dir/index.html
echo "$ipaddr $web_host_name" >> /etc/hosts[ -f $conf ] && cat >> $conf <<end
NameVirtualHost $ipaddr:80
<VirtualHost $ipaddr:80>ServerAdmin webmaster@$web_host_nameDocumentRoot $root_dirServerName $web_host_nameErrorLog logs/$web_host_name-error_logCustomLog logs/$web_host_name-access_loh common
</VirtualHost>
end
↩︎
abc ↩︎
SHELL编程之CASE语句+函数+正则相关推荐
- 【Shell】编程之CASE语句+函数+正则(6)
#课程目标 掌握case语句的基本语法结构 掌握函数的定义及调用 掌握常用的正则表达式元字符含义 一.case语句 关键词:确认过眼神,你是对的人
- day31-SHELL编程之CASE语句+函数+正则
课程目标 掌握case语句的基本语法结构 掌握函数的定义及调用 掌握常用的正则表达式元字符含义 一.case语句 case语句为多选择语句.可以用case语句匹配一个值与一个模式,如果匹配成功,执行相 ...
- 06_shell编程之CASE语句+函数+正则
文章目录 一.case语句 1. 语法结构 2. 应用案例 ㈠ 脚本传不同值做不同事 ㈡ 根据用户需求选择做事 二.==函数== 1. 什么是函数? 2. 如何定义函数? ㈠ 当前命令行调用 ㈡ 定义 ...
- shell编程之case语句及函数
shell编程之case语句 文章目录 shell编程之case语句 一.case语句 1. 语法结构 2. 应用案例 二.函数 1. 什么是函数? 2. 如何定义函数? 3. 函数如何调用? ㈠ 当 ...
- Shell编程之case语句与函数
一.case语句 1.语法结构 2.应用案例 1)脚本传不同值做不同事 2)根据用户需求选择做事 二.函数 1.什么是函数? 2.如何定义函数? 3.函数如何调用? 1)当前命令行调用 2)定义到用户 ...
- shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
case多分支语句 循环语句 for循环语句 while循环语句 untli循环语句 Shell函数 Shell数组 case语句的结构 针对变量的不同取值,分别执行不同的命令序列 case 变量值 ...
- Shell 编程之 case 语句
一.case 语句 1.case 语句概述 (1)case 语句的作用 使用 case 语句改写 if 多分支可以使脚本结构更加清晰.层次分明.针对变量的不同取 值,执行不同的命令序列. 2.case ...
- Shell编程之case语句
1. case 语句 1.基本语法 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1;; "值2") 如果变量的值等于值2,则执行程序2 ...
- 详解Shell编程之if语句实战(小结)
本篇文章主要介绍了详解Shell编程之if语句实战(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 对于if语句,其实很多人都肯定的听说过,那么if语句到底是什么, ...
最新文章
- Java 必须掌握的 20+ 种 Spring 常用注解
- R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
- Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
- OpenLayers事件处理Event.js(七)
- python2 与 python3的区别总结
- Android:生命周期案例
- jQuery使用ajax跨域请求获取数据
- android 三个点按钮实现_Android 常用侧滑栏实现
- 华为游戏帧率测试的软件,华为手机怎么在游戏内显示帧率 | 手游网游页游攻略大全...
- 你该不会不知道,web自动化测试中的八大定位方法吧!
- 【IMU】BMI160 Driver分析及使用
- java 解析xml工具类_轻松解析XML的工具类
- 分享10个超棒的设计素材网站
- 西门子PLC学习笔记十-(计数器)
- 腾讯云乐固客户端加固打包上线流程
- Auto MPG 汽车油耗预测(tensorflow深度学习龙书笔记)
- Qt之定制个性化系统托盘菜单(仿360安全卫士)
- 动作手游实时PVP帧同步方案(客户端)
- vue获取服务器路径图片显示,vue img图片路径和背景图片路径打包问题
- word中图片为嵌入式格式时显示不全_图片在word中显示不全怎么处理_word图片显示不全怎么办-win7之家...
热门文章
- 2022年10月各大学网络教育统考大学英语B考试复习题库及辅导
- mysql version pom_Maven的pom文件里,类似于这种版本号${spring.version} 是什么意思?...
- 这些年,比特大陆与前员工的那些恩怨情仇
- minicom安装、配置和使用
- 创始人是公关营销的关键所在
- Mysql一些表结构字段是数据库关键字需要避开,如果发现了就需要解决
- 程序员需要达到什么水平才能拿到20K?
- 大数据标签获取处理步骤_用大数据给用户“打标签”,精准营销就是这么简单!...
- 投资理财-大跌也许是好事情
- 2023年上半年系统集成项目管理工程师上午真题及答案解析