做语法测试,没有消息就是最好的消息
加权限
单个语句的错误并不妨碍之后的语句,但是逻辑错误会导致后续语句执行不了
bash:
-n:语法测试
-x:模拟单步执行
变量类别:
本地变量
环境变量:
export:导出,作用于当前进程及其子进程
局部变量
位置变量:到达两位数用${10}
2、
命令引用:
1、“使用反引号
2、使用$()
3、
4、写一个脚本,接受一个参数作为用户名,此脚本可创建此用户,并且其密码同用户名
5、$#记录参数的个数,$*所有的参数,$@所有的参数(当成一个参数)
6、
shift [n]:n默认为1
bash的循环语句:
for:遍历有限的元素列表
while
until
for语句格式:
for var_name in list;do
循环体
done
生成数值列表:
1、{start..end}
2、seq 开始 [步进] 结束
练习:创建10个用户,user301–user310
for userNo in {301..310}
或
for userNo in $(seq 301 310);do
useradd user${userNo}
done
练习:创建目录/tmp/dir-当前时间,在此目录中创建10个空文件,分别为file1-file10
练习:
1、创建用户tuser1-tuser9
2、创建目录/tmp/dir-当前时间
3、在/tmp/dir-当前时间目录中创建9个空文件
4、将file101的属主改为tuser1,依次类推
bash中的算术运算
declare
-i:整型变量
-x:环境变量,类似于export
let varName=算术表达式
varName=$[算术表达式]
varName=$((算术表达式))
varName=`expr $num1 + $num2`
练习:计算100以内所有正整数之和
练习:分别计算100以内所有奇数和偶数之和
练习:计算当前系统所有用户的id之和
练习:计算/etc/rc.d/rc.sysinit /etc/init.d/functions /etc/issue三个文件中的字符数之和
练习:新建用户tmpuser1-tmpuser10,并计算他们的id之和
位置参数:
$#:参数个数
$*,$@:引用所有的位置参数
交互式脚本:
给变量以默认值:
varName=${varName:-value}
如果varName不空,则其值不变,否则value则作为其值
${varName:-value}
超时和默认值:
练习:通过键盘给定一个文件的路径,来判断文件内容的类型
练习:通过键盘给定一个目录路径,默认为“/”,来判断目录下文件内容的类型
算术运算:
let varName=value
declare -i varNmae=value
declare -x全局变量
bash实现算术运算的方式:(不支持小数运算)
let varName=expression
$[expression]
$((expression))推荐
expr expression 中间必须加空格
a=2
b=4
let c=$a+$b
let a++
字串连接:
变量引用后方跟直接字串时,变量名要加{}
变量命名:第一个单词首字母小写,其他单词首字母大写
练习:
1、脚本可以接受一个以上的文件路径作为参数
2、显示每个文件所拥有的行数
3、显示本次共对多少个文件执行了行数统计
4、显示所有文件的总行数
练习:
新建10个用户,并求他们的id之和
练习:
分别统计/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/inittab以#开头的行和空白行
练习:
显示当前系统上所有默认shell为bash的用户名、uid及所有此类用户的uid之和
逻辑运算:
与运算:
真,假:
真&&真=真
真&&假=假
假&&真=假
假&&假=假
或运算:
真,假:
真||真=真
真||假=真
假||真=真
假||假=假
非运算:
真,假:
!真=假
!假=真
亦或运算:操作数相同为假、相反为真
比较运算:>,<,>=,<=,==,!=
条件测试:
[ expr ]:命令
[[ expr ]]:关键字
test expr
测试类型:根据比较时的操作数的类型
整数测试:整数比较
字符串测试
文件测试:判断文件的存在及属性等
注意:比较运算通常只在同一种类型之间进行
整型测试:
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于
-nq:不等
字符测试:
>:大于
<:小于
<=:小于等于
>=:大于等于
!=:不等
-n:是否不空,不空为真,空为假
-z:是否为空,空为真,不空为假
选择:
if和case
if:三种格式
1、if 测试条件;then
选择分支
fi
if ! id $username &> /dev/null;then
useradd $username
fi
练习:写一个脚本,接受一个参数,这个参数是用户名,如果用户存在,则显示其id号
改进版:
2、if 测试条件;then
分支1
else:
分支2
fi
练习:通过命令行传递2个整数参数给脚本,脚本返回其最大值
练习:通过命令行传递任意个整数给脚本,脚本可以返回其最大值
练习:通过命令行给定一个文件路径,判断如果此文件中存在空白行,则显示其空白行的总数,否则显示无空白行
如果把命令执行成功与否当做条件,则if语句后必须只跟命令本身,而不能引用
3、if 条件1;then
分支1
elif 条件2;then
分支2
elif 条件3;then
分支3
else
分支n
fi
练习:传递一个参数给脚本,如果参数为quit则显示你要退出了,如果参数为yes,则显示说你要继续,如果为其他任意参数,则说无法识别。
练习:传递一个用户名给脚本:如果其id为0,则为管理员,如果id大于500则为普通用户,其他为系统用户
重定向:改变其标准位置
标准输入:0
键盘
标准输出:1
显示器
错误输出:2
显示器
输出重定向:
command > position覆盖重定向
command >> position追加重定向
错误重定向:
command 2> position覆盖输出
command 2>> position追加输出
正常的信息正常输出:
合并重定向:
command &> position指向同一位置,position中要么保存正常信息,要么是错误信息
command > position 2> &1错误的也输出到1的位置
分别重定向:
command > position1 2>position2正确的输出到position1中,错误的输出到position2中
会把原文件清掉
输入重定向:
command < position
<<:here document此处生成文档,EOF:end of file
直接输出到屏幕
原创文章,作者:黑白子,如若转载,请注明出处:http://www.178linux.com/46814