&&和||
&&用来执行条件成立后执行的命令
||用来执行条件不成立后执行的命令
例如:
ping -c 1-w 1 172.25.254.6 &&echo up ||echo no
test 命令:
test 命令和[]等同
test "$A" == "$B" 等同于 [ "$A" == "$B" ]
[ "$A" = "$B" ] | A=B |
[ "$A" != "$B" ] | A不等于B的数值时候为真 |
[ "$A" -eq "$B" ] | A=B |
[ "$A" -le "$B" ] | A小于B结果为真 |
[ "$A" -lt "$B" ] | A小于B结果为真 |
实验:
[ "$A" -ge "$B" ] | A的数值大于等于B的数值为真 |
[ "$A" -gt "$B" ] | A的数值大于B的数值 |
[ "$A" -ne "$B" -a "$A" -gt "$B" ] | A的数值不等于B且A 大于B |
[ "$A" -ne "$B" -o "$A" -gt "$B" ] | A的不等于B且A大于B |
[ -z "$A" ] | 输入为空为真 |
[ -n "$A" ] | 输入不为空为真 |
[ "file1" -ef "file2" ] | 文件1和文件2是一样的 |
[ "file1" -nt "file2" ] | 文件1比文件二新 |
[ "file1" -ot "file2" ] | 文件1比文件2老 |
[ -z "$1" ]的用法:
vim test.sh ###编辑一个脚本文件,文件内写入:
表示的是如过前面的输入是空的话输出yes,输入不为空的时候输出no
测试:
sh test.sh
而[ -n "$1" ]&&echo yes ||echo no的效果刚好相反,在这里就不再赘述,读者可以自己编辑脚本测试。
[ "file1" -ef "file2" ]的用法:
1>ln /script/westos /script/westos1
2>[ "westos" -ef "westos1" ]&&echo yes ||echo no ###文件westos和文件westos1是不是一样,一样的话输出yes,不一样输出no
[ "file1" -ot "file2" ]的用法:
1>前后创建两个文件
用[ "redhat" -ot "redhat1" ]&&echo old||echo no old 命令进行比较,结果:
这是有人会怀疑这个命令是比较时间的吗?是不是比较文件名或者其他的东西了,如果同时创建两个文件:
这是再用命令来比较它们两个文件的新旧:(可以从下面的实验看出它们的比较结果是不新不旧,与猜想一致。)
[ "test" -ot "test1" ]&&echo old||echo no old
[ "test" -nt "test1" ]&&echo new||echo no new
[ -e "file" ] 目标文件存在
[ -f "file" ] 目标是文件类型
[ -L "file" ] 此文件是链接类型
[ -S "file" ] 目标是套接字类型
[ -b "file" ] 目标是块设备
[ -d "file" ] 目标是个目录
[ -c "file" ] 目标是字符设备
测试:编辑一个脚本文件check_file.sh,作用是:检查文件类型。
#!/bin/bash
[ -e "$1" ]||{
echo "Please input the path of file"
exit
}
[ -L "$1" ]&&{
echo "this file's type is Link"
exit
}
[ -f "$1" ]&&{
echo "this file's type is file"
exit
}
[ -S "$1" ]&&{
echo "this file's type is socket"
exit
}
[ -b "$1" ]&&{
echo "this file's type is block"
exit
}
[ -d "$1" ]&&{
echo "this file's type is directory"
exit
}
[ -c "$1" ]&&{
echo "this file's type is zifu"
exit
}
Complete!!
####grep a
grep命令扩展:
grep root passwd ##查找passwd文件中的root字符
grep root passwd -i ##查找passwd文件中的root字符,不区分大小写
grep -i "\<root" passwd ##root字符前面的字符过滤掉,和前面一个实验比起来是testroot不会表红了,倒数第五行。
grep -i "\<root\>" passwd ##字符前后都过滤 只会得到root字符
grep -i "\<root$" passwd ##以root字符结尾的字符过滤
grep -iE "^root\>|\<root$" passwd ###-E表示扩展
grep -v表示反向查找
命令:
grep -E "x*" westos 出现x的和任意字符的
grep -E "x?" westos 出现x的个数是1或者2的摘录出来更明显的用法是:
grep -E "x?y" westos 出现x的个数是1或者2出现y的个数是1的摘录出来
grep -E "x\>{?}" westos 以x结尾的那一行,但是显示的是全部
grep -E "x{3}y" westos x出现的次数 是3的那一行摘录出来
grep -E "x{1,3}y" westos x出现的次数是一到三次的那一行摘录出来
grep -E "x{,3}y" westos x少于三次的行数摘录出来
grep -E "(ab){2,}" westos ab出现两次以上的摘录出来
命令测试:
grep -E "x*" westos 出现x的和任意字符的
grep -E "x?y" westos 出现x的个数是0或者1的(词段)摘录出来更明显的用法是:这个词段需要好好理解
grep -E "x\>$" westos 以x结尾的那一行,但是显示的是全部
grep -E "x{3}y" westos x出现的次数 是3的那一行摘录出来
grep -E "x{1,3}y" westos x出现的次数是一到三次的那一行摘录出来
grep -E "x{,3}y" westos x少于三次的行数摘录出来
grep -E "(xy){2,}" westos xy出现两次以上的摘录出来
cat命令延伸:
命令:
cat -b fstab 查看fstab文件的时候加上行号,行号忽略空白行
cat -n fstab 查看fstab文件的时候加上行号
命令用法:
cat -b fstab 查看fstab文件的时候加上行号,行号忽略空白行
cat -n fstab 查看fstab文件的时候加上行号
sed命令:
sed -n /^#/p fstab ###查看以#开头的行
sed -n '/^#/!'p fstab ###查看文件不是以#开头的行
cat -n fstab |sed -n '2,6p' ##查看第二行到第六行
cat -n fstab |sed -n '6p'
cat -n fstab |sed -n -e '6p' -e '2p' 查看第二行和第六行
cat -n fstab |sed -n -e '6p;3p' ###查看第二行和第6行
sed '/^#/d' fstab 不显示以#开头的行数
sed -e '/^#/d' fstab 和上面的效果一样
sed '/^#/chello\nwestos' fstab ###将文件中以#开头的行修改为hello\nwestos
sed -n '/^#/w /mnt/testfile' fstab ###将fstab文件中的以#开头的行输入到testfile文件中;此命令可以生成目标文件。
sed '1r /mnt/westos' fstab ###将fstab文件中的内容加入到/mnt/westos文件中的第一行之后
sed '/^UUID/aheelo' fstab ###将fstab文件的以UUID开头的一行之后加上hello
sed '/^UUID/ihello' fstab ###给fstab文件的以UUID开头的一行之前加上hello
sed 's/nologion/bash/g' passwd
sed '1,5s/bash/nologin/g' passwd
sed -e '5s/nologin/bash/g;3s/nologin/bash' passwd
sed '/root/,/sync/s/mologin/bash/g' passwd
sed 'G' passwd ###给passwd文件的每一行后面加上空行
sed '$!G' passwd ###最后一行不加空行
实验:编写一个脚本,此脚本可以更改apache的端口:
1.查看apache的配置文件:
Listen 80一行的特点是以Listen开头的,可以用下面一行命令修改配置文件里面的端口信息:
sed '/^Listen/cLinsten 8080' /etc/httpd/conf/httpd.conf
脚本:
测试:
实验:编辑一个脚本,脚本运行可以将指定的文件里面的用户的名字建立出来,用另外一个密码文件为目标用户设置密码:
user_create.sh user_name user_passwd
注:shell中的for语法
for i in $(seq 1 10)
do
echo ${i}westos
done
测试: