shell01.rar 找到系统上所有设定了特权位的程序
# find / -perm -u=s
找到/etc/目录下的所有*.conf 配置文件,并且通过tar打包,保存在/tmp/xxxx-xx-xx.tar
# find /etc/ -name "*.conf" -exec tar rvf /tmp/2011-07-02.tar {} \;
脚本:
基本命令[ +语法+特定格式]=shell脚本
特定格式:
魔法字节
执行shell
. /path/to/script 在当前shell执行脚本里的代码
bash /path/to/script 使用指定bash作为子shell执行脚本
/path/to/script <---魔法字节是生效 , 子shell执行脚本
注释符号
#
变量
一个名字,可以保存其他内容(值)
变量定义
变量名字=变量的值
var=value
a=1
b=tom
c="wel to upl"
注意:
“=“ 两边不能有空格
变量替换/取出变量的值
$或者${}都是取值符号
$var
变量分类:
普通变量
自定义的,仅仅在脚本中使用。使用完毕就完成任务的。
系统变量
系统定义好的,已经固定了它的作用和意义.
例如: $1,$2,$3,....,$9,${10},${11}
$@,$*,$?,$#,$$
附件中有sh的例子,可以测试出$@..$$的含义:$@和$*是显示输入参数的值,$?返回上次命令执行代码
,$#返回输入的参数总个数,$$返回当前的bash的PID 环境变量
一般用于影响其他程序的操作。一般都是大写字母作为变量的名字。查看环境变量:env
例如: PATH,DISPLAY等等
定义:# export UPL=uplooking
双引号,单引号
弱,强
例子1:编写一个脚本,使用把nfs服务器上的文件打包成tar,备份到本地/backup目录
10.1.1.22:/share/pub
#!/bin/bash
mount 10.1.1.22:/share/pub /mnt
cd /mnt
tar cvf /backup/nfsbackup-`date "+%Y-%m-%d"`.tar *
umount /mnt
例子2:编写一个脚本,要求输出系统所有用户的总数
#/bin/bash
cat /etc/passwd | wc -l
命令替换``,$()
a=`cat /etc/passwd | wc -l`
b=$(uname -r)
算术运算
在shell当中,默认就直接支持简单四则整数运算。
+,-,*,/,%
形式一: let ,支持c+=,c语法
let "b=$a+1" <----"写表达式,符号之间的空格随意"
let b++
形式二:expr
expr $b + 3 <--直接把结果输出,表达式被分成三个参数
a=`expr $b + 3`
形式三: $((表达式))
echo $((7+4))
echo $(($a+$b))
echo $((a+b))
echo $((a++))
浮点数运算:
# echo | awk '{print 7/2}'
bc命令
# echo "scale=2;7/2" | bc
交互模式给变量赋值
read
例子:
编写一个脚本,脚本执行完毕之后,会提示输入一个需要新建的帐号名,输入默认shell的路径,还有家目录所在。
Username:
Shell:
Home:
Password:
==================================================================
条件测试
用于判断所给的条件是否满足
语法格式
如果expression满足,就执行里面的command
if [ expression ];then
command
fi
如果expression满足,就执行里面的command1,否则执行else里的command2
if [ expression ];then
command1
else
command2
fi
如果expression1满足,就执行里面的command1,如果不满足,就匹配expression2,如果满足就执行command2,否则执行else里的command3
if [ expression1 ];then
command1
elif [ expression2 ];then
command2
else
command3
fi
嵌套格式
if [ expression ];then
command
if [ expression ];then
command1
else
command2
fi
fi
具有同等作用命令 test , [
查看帮助 man test
test a = b
/usr/bin/[a = b ] <---注意空格
=,!=
-eq,-ne,-gt,-ge,-lt,-le
-e,-f,-r,-w,-x,-L
例子:
输入一个路径,判断该文件是否为字符链接
例子:
输入一个路径,判断该文件或目录的权限
把脚本放在/tmp。给予755权限,用普通帐号执行脚本
输出结果:
/path/to/File:
Read=Yes,Write=No,Execute=No
perm.sh
例子:输入用户名,判断用户是否存在,如果存在输出User Exist! 否则输出User not Exist!
user.sh
例子:输入一个年份,判断是否为闰年
闰年: 能够被4整除并且不能被100整除的就是闰年
或者能被400整除的也是闰年。
如果 [ 能够被4整除 并且 不能被100整除 ];then
闰年
再如果
[ 能被400整除 ];then
闰年
否则
不是闰年
runnian.sh
作业:使用脚本完成下面任务
1、执行一个脚本,交互模式输入一个文件,需要判断这是一个普通文件还是目录,并判断这个文件的权限,把文件类型(文件还是目录),权限结果输出
2、判断某个目录下所有文件的大小,并以邮件通知的形式告诉管理员root
3、交互模式输入一个文件,判断这个文件是否是符号链接文件,如果是,再判断这个文件是否为死链接
4、交互模式要求输入一个ip,然后脚本判断这个IP 对应的主机是否 能ping 通,输出结果类似于:
Server 10.1.1.20 is Down!
思考:
判断一个IP是否合法?
阅读(726) | 评论(0) | 转发(0) |