字符测试方法:
双目测试
比较两个字符串:
==:等于,等值比较
!=:不等
单目测试:
-n $stringVar:字符串是否为空,不空为真,空则为假
-z $stringVar:字符串是否为空,空则为真,不空为假
例:
-a:用于逻辑与的操作
-e:检查文件是否存在
-f:检查文件是否为普通文件
-d:检查文件是否为目录文件
-r:检查文件是否可读
-w:检查文件是否可执行
-x:检查文件是否可执行
练习题
案例1:
1.显示如下菜单:
cpu) show cpu info;
mem) sowmemory info;
quit) quit
Enter your option:
2.如果用户选择cpu,则显示文件/proc/cpuinfo的信息;
3.如果用户选择mem,则显示文件/proc/meminfo的信息;
4.如果用户选择quit,则退出,且状态码为5;
5.如果用户输入其他字符,则显示未知选项,请重新执行脚本,退出状态码为6
答:
位置替换
#!/bin/bash
echo "参数列表:$#" 、 echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"
案例:
写一个脚本:
使用形式如下:脚本名称 u username[v{1|2}]
-u选项用于指定用户名;脚本显示用户名的uid,gud
如果同时使用-v选项: v后面的值是1,显示用户的家目录 v后面的值是2,显示用户的家目录和shell类型
forxun循环入门
脚本执行流程:
顺序执行:默认规则,逐条执行语句
选择执行:条件判断,符合条件给予执行
循环执行:将同一段代码反复执行。 for 、 while
for循环详解
for循环格式
for Var_Name in 列表;
do
循环体
done
生成列表方式:
方法一:
方法二:
方法三:
方法四:
for循环实践
案例1:删除10个用户,user120....130,并且删除其家目录
for username in {120..130}
do
userdel -r user$username
echo "user$username del"
done
案例2:用file命令,显示 /var/log目录下每个文件类型
案例3: 编写脚本,要求如下: 1.创建/tmp/scr目录 2.在目录里创建测试文件tfile1 tfile2 .....tfile20 3.创建用户testuser1和testuser2 4.将tfile1到10的属主和属组改为testuser1 5.将tfile11到20的属主和属组改为testuser2
案例4: 编写shell脚本,要求如下: 1、测试192.168.1.1-100的所有主机是否在线 2、如果在线,显示"ip is up." 3、如果不在线,显示"ip is down."
案例5: 显示/etc/host.conf、/var/log/messages各有多少行
bash四则运算
方法一:使用方括号 方法二:使用双圆括号
四则运算符: + - * / %
案例1:计算100以内所有正整数之和
案例2:分别计算100以内偶数之和和奇数之和
方法一:
方法二:
案例三:新建用户tmpuser1.. tmpuser10,并计算他们的id之和
while循环介绍
while的语法结构
注意:while循环必须有推出条件,否则会死循环
案例一:计算100以内的和
案例二:求100以内偶数的和
案例3:监控tom是否登录系统,如果登录系统,向另一个终端发信息
while处理文件
while read line (line为变量命名)
do
循环体
done</etc/passwd
案例4:重复提示用户输入字符串,无论输入什么字符串,都转换成小写,并显示,如果用户输入quit就退出
案例5:1.显示一个菜单给用户 d|D)show disk usages ;m|M)show memory usages ; *)quit 2.当用户选定后显示相对应的内容,不退出 而让用户再一次选择,再次显示相应的内容,除了用户使用quit,则退出。
案例6:显示/etc/passwd文件中,其总字符个数大于3且以”root“开头的行
案例7:显示/etc/passwd文件中,其总字符个数大于3且以”root“开头的行。
循环控制
神什么是循环控制? 循环控制指的是特定的时间地点退出循环,与循环条件无关
实现循环控制的方法? 1. continue:提前结束本次循环从而进行下一轮。 2.break:跳出当前循环。
-b:半段是否存在且是一个块特殊文件
案例1:.提示用户输入一个文件,如果文件不存在,就提示用户重新输入,直到用户输入正确为止,用户输入quit退出。
案例2:当用户给出正确的块设备后 1、显示输入块设备文件 2、如果用户输入y,则继续后面的操作; 3、如果用户输入n,则显示用户选择了中止,并退出脚本; 4、输入任何其它字符,则让用户重新选择;
案例3: 1.提示用户输入一个目录路径,2.显示目录下至少包含一个大写字母的文件名;
bash随机数
/dev/random (0-32767) 、 /dev/urandom
echo $RANDOM
echo $[$RANDOM%100]
案例1:使用RANDOM生成10个100以内的随机数,并找出其中的最大数
case语句
case 表达式 in
样式1)
语句1;;
样式2)
语句2;;
样式n)
语句n;;
*)
其他语句;;
esac
casede
中pattern模式:
a|b:a或者b *:匹配任意长度的任意字符 ?:匹配任意单个字符 [ ]:范围匹配
案例1: 1.提示用户输入一个任意字符 ,2.判断字符是数字还是字母或者特殊符号 ,3.用户输入quit退出.
函数
简介:函数就是一块代码,这个代码可以反复执行
函数的作用:实现代码复用,提高开发效率
定义方法:
FunName () {
函数体
}
funtion FunName {
}
案例1: 猜数字:系统随机一个100以内数字,提示用户输入一个100以内的数字,输入的是系统的随机数就提示用户: 猜对了, 如果比系统数字小,就提示:小了,大了就提示:大了,直到猜对则退出。
案例2: 猜拳游戏:石头、剪刀、布 规则: 提示用户输入石头、剪刀、布。 和系统比较,并输出相对应结果:玩家赢 | 系统赢 | 平局。
方法一:
方法二: