目录
1.批量生成
[ -d ./oldboy ] || mkdir ./oldboy
cd ./oldboy
echo $(pwd) && \
#此处的单引号是电脑键盘左上角上的点
for i in `seq 1 10`
do
filename=$(uuidgen|tr '0-9' 'a-z' |cut -c 1-10)
touch ${filename}_oldboy.html
done
2.批量修改
#文件目录的组成
dir=$(pwd)/oldboy
echo "$dir"
if [ ! -d "$dir" ]
then
echo "$dir not exist"
return exit 0
fi
cd $dir && \
for i in $(ls *html)
do
ranStr=$(echo $i| cut -c -10)
mv $i ${ranStr}_oldgirl.html
done
3. 批量生产用户
[ -d ./oldboy ] || mkdir ./oldboy
cd ./oldboy
echo $(pwd) && \
source /etc/init.d/functions
#定位到action的执行
for i in oldboy{01..03}
do
useradd $i &>/dev/null# &> 等于2 也就是STDERR, > 等于1 STDOUT
if [ $? -eq 0 ];#上一句执行结果
then
#表示用户添加成功 显示ok 绿色
#uuidgen 生成随机密码,截取数字为小写字母 取10个字符
action "$i" /bin/true
echo $(uuidgen|tr '0-9' 'a-z' | cut -c 1-10)|passwd --stdin $i &>/dev/null
echo $i $(uuidgen|tr '0-9' 'a-z' | cut -c 1-10) >>/tmp/passwd.txt
else
#表示用户添加失败 显示 FALSE 红色
action "$i" /bin/false
fi
done
4. 生产随机密码
日期和随机数生成md5 值,取随机的1-8个字符
randomPass="`date`$RANDOM"|md5sum|cut -c 1-8
echo ${randomPass}
#生成16进制密码
uuidgen
#进程ID版本,数字密码
echo $$
5. 批量判断网络10.0.0.内的主机是否通信
#!/bin/bash
source /etc/init.d/functions
#source 命令也可使用 . /etc/init.d/functions 命令来导入功能函数库
for i in 10.0.0.{1..254}
do
{
ping -c 2 -w 2 $i &>/dev/null
if [ $? -eq 0 ];then
echo $i is ok!
action $i /bin/true
else
echo $i is donwn! >>/tmp/ip_down.txt
action $i /bin/false
fi
}&
done
6.sed 命令使用
#!/bin/bash
#test sed command
sed -e 's/brown/green/;s/dog/cat/' data1
#data1 为文件名
#-e 表示多条命令 命令之间用“;”隔开,不允许有空格
#s 命令替换 brown为green,dog为cat,即第一个斜杠内容替换为第二个斜杠内容
7.gawk 命令使用
#!/bin/bash
gawk -F: -f script1 /etc/passwd
#-F: 选项表示内容每行分割符是:
#-f script1 指定读取script1文件中的命令
#script1文件内容{ print $1 " 's home directory is " $6}
#/etc/passwd 为处理的目标文件
8.gawk 正则表达式
#!/bin/bash
# exercise the regular expression
#匹配Email地址
gawk --re-interval '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}'
#^([a-zA-Z0-9_\-\.\+]+) 匹配字母数字加 _ - . + 特殊字符用转义 \ 之后+至少一次
#([a-zA-Z0-9_\-\.]+)\. 域名部分也是一样匹配
#顶级域名([a-zA-Z]{2,5})$ 以字母为主,2到5个字符
#匹配美国电话号码
gawk --re-interval '/^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}$/{print $0}'
#电话号码格式 (123)-555-890
#^\(? 开头匹配左括号 一次或没有
#[2-9][0-9]{2} 要求第一个数字是2-9之间数字,后面跟两个数字
#\)? 匹配开头右边括号一次或没有
#(| |-|\.) 后面跟个空格 - 或 . 特殊字符
#[0-9]{3} 匹配3个数字
#( |-|\.) 匹配空格或 - 或 . 特殊字符
#[0-9]{4}$ 结尾匹配4个数字
9.sed 单词替换空白行处理
#!/bin/bash
:<<!
data2 内容
This is the header line
This is the second line
This is the last line
!
#G 命令用来在所有行后插入 空白行
$sed 'G' data2
#如果不在最后一行插入空白行,$代表最后一行
$sed '$!G' data2
#文本内容原本就有空白行
:<<!
This is the haeder line
This is the second line
This is the last line
!
#这个时候可以先删除所有空白行,^$/d 删除空白行在用G插入空白行
#$!G $ 表示最后一行,!G 表示命令不作用,命令如下
$sed -e '/^$/d;$!G' data2
#sed 单词替换
$echo "The cat sleeps in his hat." | sed 's/.at/"&"/g'
$The "cat" sleeps in his "hat".
# & 代表通配符匹配的内容,g表示匹配全部
$echo "The system admin manul" | sed 's/\(system\) admin/\1 user/'
#将system admin 替换为\1 user,\1 为() 提取的子字符串模块 system
#替换结果为 The system user manul
$echo "The furry hat is pretty" | sed 's/furry \(.at\)/\1/'
$The hat is pretty
$echo "The furry cat is pretty" | sed 's/furry \(.at\)/\1/'
$The cat is pretty
#匹配数字3位. 号
$ echo "1234567" | sed '{:start;s/\(.*[0-9]\)\([0-9]\{3\}\)/\1.\2/;t start}'
1.234.567
#.*[0-9] 以数字结尾的任意长度字符,[0-9]{3} 3位数字组成的字符串 用() 来表示为\1 \2 提取匹配
#t 类似如小型 if then 语句跳转
10.sed 处理文本反转脚本
#!/bin/bash
# test shell script
sed -n '{
1!G
h
$p
}' $1
#-n 表示不及时输出,1!G 第一行不处理保持空间追加到模式空间
#其他行保持空间追加到模式空间
#h 模式空间复制到保持空间
#$p 打印输出
# $1 读取脚步执行第一个参数
11.sed 清除HTML标签
#!/bin/bash
#filter the html tag
$sed 's/<[^>]*>//g;/^$/d' data3
# 中间用[^>] 来保证标签匹配的正确性
#/^$/d用来删除空白行
#data3 内容
:<<!
<html>
<head>
<title>This is the page title</title>
</head>
<body>
<p>
This is the <b>first</b> line in the web page.This should provide some <i> useful</i>
information for us to use in our shell script.
</p>
</body>
</html>
!
12. $特殊字符含义
$0 表示脚本名称
$1 表示第一个参数 $2 表示第二个参数 $3 表示第三个参数
$@ 表示所有参数为字符串列表
$* 表示所有参数为一个字符串
#举例./t.sh 1 2 3 执行,$@ 代码 "1" "2" "3" ,$*表示 “1 2 3”
#$@ 在for 不带 in [list] 时是其默认选项, 举例
for option
do
echo $option
done
#以上脚本就依次读取脚本运行是指定的参数了
$? 表示上一条脚本命令执行的结果,退出码
#一般 if [ $? eq 0 ]; then echo "excute successed!" 判断上一条命令是否执行成功
$$ 表示脚本运行时的PID
13.for 循环 使用注意
t.sh 文件内容
#!/bin/bash
for option
do
echo $option
done
#当 for 不使用 in [list] 默认 使用$@ 读取默认参数列表
#具体执行情况如下
./t.sh 1 2 3
#输出
1
2
3
#此种情况 $@ 表示"1" "2" "3" , $* 表示 “1 2 3”
14.cat << END 解释
cat << END
hello
world
END
#cat << END 就是 把 cat << END END 之间的内容输出到屏幕,END 没有特殊意思,只是使用而已,
#也可以用其他字符,如 CONTENT
#cat << 这种用法可以参考 here documents
#!/bin/bash
read -p "Input yes:" help
#read -p 提示读取屏幕信息到help 变量,加上选项-s 表示读取的输入信息不再屏幕显示,一般用于
#读取用户密码如 read -p "input your password:" -s pass
if [ $help = yes ]; then
cat << CONTENT
hello
--help
--prefix=PATH
--sbin-path=PATH
--lock-path=PATH
CONTENT
fi