集中保存了多条Linux命令,普通文本文件
完成特定的,较为复杂的系统管理任务
执行方式:按照预设的顺序依次解释执行
有时候多一个空格都报错,注意注意
10.chmod a+x test.sh
a 是all所有人,意思是给所有人添加一个执行的权限
11.执行shell脚本的方式
1.bash test.sh
#不需要解析器
#不需要给脚本设置执行权限
2. /test.sh
#需要标注解析器
#需要给脚本设置执行权限
12.写一个示例:
vi /opt/ftpclean.sh
#!/bin/bash
date >> /var/log/pubdir.log
ls -lhR /var/ftp/pub >> /var/log/pubdir.log
rm -rf /var/ftp/pub/*
执行:
crontab -e
30 17 * * 5 /opt/ftpclean.sh
13.
#!/bin/bash
#test.sh
name = 'user123'
echo "my name is ${name}bg"
14.从键盘输入内容为变量赋值
格式:read [-p "信息"] 变量名
15.单引号,双引号,反引号
双引号解析变量
反引号 解析一条命令,并把命令返回值输出:
$str = `echo 123`
echo $str
16.Shell变量种类,三种
用户自定义:用户自己定义,修改,使用
预定义变量:Bash预定义的特殊变量,不能直接修改
位置变量:通过命令行给程序传递执行的参数
shell脚本编程更强的是面向命令的处理
17.shell脚本传递参数可以传递十个参数(位置变量只有九个)
./test.sh a b c d ...
echo $1...$10
18.脚本参数
$#:命令行中位置参数的个数
$*:所有位置参数的内容
$?:上一条命令执行后返回的状态,当返回状态为0时,表示执行正常,非0时表示执行异常或者出错
$0:当前执行的进程、进程名
例如:
$0 脚本名称
for i in $*; do
echo $i
sleep 1
done
19.expr 可以算数
例如:
#!/bin/bash
#test.sh
num = `expr 1 + 2`
echo $num
20.输出没有换行
echo /n 'your name is:'
read -p "your name is:"
21.修改字体颜色
echo -e "httpd process \033[32;40m[ok]\033[0m"
#\033[前景颜色;背景颜色m
#\033[0m 结束
30-37 黑红绿宗蓝紫青白
21.
cate /etc/passwd | more # 看一个文件的所有
cate /etc/passwd | head # 看一个文件的前十行
cate /etc/passwd | tail # 看一个文件的后十行
保持文字原样输出(用他快速的做菜单):
cat <<x
aaaaaaa
x
把输出的结果保存起来:
cat/etc/passwd | tee
把整个文件的内容全部打印出来
cat /etc/passwd | more | nl #加上行号
22.条件测试 -11
例子:
#!/bin/bash
#test.sh
if [ -f ./file1 ]
then
echo "file1 is exists!"
else
echo "file1 is not exists"
fi
23. &&
[ -e /media/cdrom ] && echo "YES"
如果测试的条件成立则输出YES
24.
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
25.who 当前登录这个系统有多少个用户
who | wc -l
26.字符串比较 = !=
格式:
[ 字符串1 = 字符串2 ] 字符串内容相同
-z : 字符串内容为空
27.逻辑测试
-a or &&
||
!
28.case语句
case $week in
1)
echo '周一'
;;
2)
echo '周二'
;;
*)
echo '其余'
;;
esac
29.循环控制:
for in
例子:
#!/bin/bash
#test.sh
for i in `cat user.txt`
do
echo $i
useradd $i
echo 123|passwd --stdin $i
done
注释:in 背后可以是各种命令
for循环:
for((i=0;i<10;i++))
do
echo $i
useradd user$i
echo 123 | passwd --stdin user$i
done
30.在shall脚本中,定义变量是不用带$,输出是要带$符号的
31.shift 让参数左侧偏移
32.函数传参
#!/bin/bash
#test.sh
function add(){
num = $1
tot = 0
for((i=1;i<=$num;i++))
do
tot=$(($tot+$i))
done
echo $tot
}
add 3
add 6
add 100
33.find 文件查找
find . -name "*.txt"
find . -name 'file[0-9]*'
find /etc -name "host*"
find / -name "eth0"
find -perm 755
34.grep 正则表达式
\ 用来转义真实的.?等符号
[0-9a-z]匹配括号里面的任意一个字符
grep -c 'linux' file #找出包含linux的有几行
grep -n 'linux' file #行号
grep -i 'linux' file #忽略大小写查找
grep 'linux' file #找出包含linux的行
grep -v 'linux' file #不包含linux的行
grep -E '^linux' file #查出包含以linux开头的行
grep -E 'linux$' file #查出包含以linux结尾的行
grep -En '(linux){2,4}' file #查出包含以linux2次到4次的行
[^210] #不是210开头的行
35.AWK编程工具
cat /etc/passwd | awk -F: '{print $1 "=>" $3}'