bash脚本编程之五 字符串测试及for循环
整数测试:
-le:小于等于
-lt:小于
-ge:大于等于
-gt:大于
-eq:等于
-ne:不等于
字符测试:
==:测试是否相等,相等为真,不等为假
!=:测试是否不等,不等为真,等为假
-n string:测试字符串是否为空,空则真,不空则假
-z string:测试指定字符串是否不空,不空为真,空则为假
文件测试:
-e:如果文件存在则为真
-f:如果文件存在且为普通文件则为真
-d:如果文件存在且为目录则为真
-r:如果文件存在且可读则为真
-w:如果文件存在且可写则为真
-x:如果文件存在且可执行则为真
组合测试条件
-a:与关系
-o:或关系
-l:非关系
if [ $# -gt 1 -a $# -le 3]:如果传递给shell的参数个数大于等于1并且小于等于3则为真
if[ $# -gt 1 ] && [ $# -le 3 ]:同上一样的意思换种表达
循环:进入条件,退出条件
for
while
until
for 变量 in 列表; do !!!注与if语句中then一样,如果do单独一行写不用加;否则跟for语句写在一块需加;
eg
for I in 1 2 3 4 5 6 7 8 9 10;do
加法运算H
done
进入条件从列表第一个开始,退出条件是列表被遍历完成之后。
如何生成列表
[1...100]
seq [起始数 [步进长度] ] 结束数 !!!注:[]表示里面的内容可省
declare -i SUM=0:声明变量是整形
integer 整形
例子:
字符测试:
练习:传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将其显示出来


练习:写一个脚本
传递一个参数(单字符就行)给脚本,如参数为q、Q、quit、或Quit就退出脚本;否则,就显示用户的参数;



练习:
写一个脚本:
1、设定变量FILE值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如
Hello,root,your shell: /bin/bash
3、统计一共有多少个用户
脚本:

执行结果:

来个逼格更高的:只向默认shell为bash的用户问好
脚本:

嵌套一个if语句用来判断默认shell是否为bash
执行结果:

写一个脚本:
1、添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加;

扩展:
接受一个参数:
add:添加用户user1....user10
del:删除用户user1...user10
其它:退出
脚本:

执行结果:



!!!注:所用到的不熟悉的知识点:linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
$#:传输给脚本的参数个数
$@:传给shell脚本的所有参数的列表
$0:脚本本身的名字
$1,2:传递给该shell脚本的第一,二个参数
$*:以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$:是脚本运行的当前进程ID号
$?:是显示最后命令的退出状态,0表示没有错误,其他表示有错误
区别:
@ *
- 相同点:都是引用所有参数
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在
1 2
)则
3)则" *" 等价于 “
1 2 ![]()
(传递了一个参数);而
3"(传递了一个参数);而“ @" 等价于 "![]()
![]()
1"" 2" "$3"(传递了三个参数)
添加指定用户:
脚本:

执行结果:

写一个脚本:
计算100以内所有能被3整除的正整数的和:
取模,取余:%
3%2=1
100%55=45
写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数,显示结果形如




浙公网安备 33010602011771号