SHELL编程基础(三)

截断字符串

格式:
    echo (变量:开始:截的长度)     expr substr 变量 开始 长度
    echo 变量|cut -b 开始位置 结束位置  a=123456789 expr substr a 1 3
echo {#a}      #显示字符串的长度 echo {a:3:8}
echo $a|cut -b 3 8

练习取出随机数

从[a~z][A~Z][0~9]中任意取出来一个数值:
x="abcdefghijklmnopqrsguvwxyzABCDEFGHJKLMNOPQRSGUVWXYZ0123456789"
a=[RANDOM%62];echo "随机数字:a";echo "随机的数值:{x:a:1}"

18个随机数字:
echo -n "8位密码为:";for i in {1..18};do a=[RANDOM%62];echo -n {x:a:1};done;echo 

字符的替换:

字符串的截取
    {变量:开始:长度} 字符串的替换     {变量/旧/新}
字符串的去头去尾
    头 -> {变量#}     尾 -> {变量%}
    echo ${phone//2/x}
##/%% 最长删除
#/% 最短删除

字符串赋予初始数值的案例

#!/bin/bash
read -p "请输入一个数字(回车默认100):" num
res={num:-100} f_xunhuan(){ a=0 for i in `seq 1 res`
do
a=[i+a] done echo "for执行结果为:a"
}

#while 来实现
w_xunhuan(){
i=1
b=0
while [ i -le res ]
do
b=[b+i] let i++ done echo "while执行结果:b"
}
time f_xunhuan
time w_xunhuan

数组:

a=(11 22 33)
echo ${a[0]}

数组的案例

#!/bin/bash
echo >./c.txt
i=0
while :
do
    read -p "请输出一系列的IP地址:" ip
    [ ip == "EOF" ] && break     ip[i]=ip     echo "数组第i组,({ip[i]})">>./c.txt     let i++ done while : do     read -p "请输入你想要的打印的组:" num     cat ./c.txt|grep "第num组"
    echo "***********"
    echo "退出输入x"
    echo "***********"
    [ $num == "x" ] && break
done

expect自动化登入

ssh -o trictHostKeyChecking=no ip
#!/bin/bash
expect <<EOF
spawn ssh 172.25.0.11
expect "passwd" {send "readhat\n"}
expect "#"      {send "pwd"}
expect "#"      {send "exit\n"}
EOF

基本正则表达式(特殊符号来表达的一种形式)

^    匹配行首
$    匹配行尾.
[]   集合,取任意的单个字符    [a-z] [0-9]
[^]  对集合取反
.    任意单个字符
*    匹配前一个字符任意次[不能单独使用]
.*   通配符,匹配所有
\{n.m\} 匹配前一个字符n到m次
\{n,\}  匹配前一个字符n次以及以上
\{n\}       匹配前一个字符n次

扩展正则表达式(简化加新的):

|   或者(text|texte)
+   最少匹配一次
?   前面内容出现了0或1次
()  整体
\b  单词边界
基本正则:兼容性强(所有软件)、复杂
扩展正则:兼容性差(不是所有软件都支持)、简单

for 循环:

for 变量名 in 值列表
do
    命令序列
done

seq命令的使用:

seq 1 10 打印1~10
seq 1 2 10 格2个数字打印一次

shell打印出颜色:

echo -e "\033[32m(内容)\033[0m"
3x是字体色彩
4x是背景色彩
0x样式

sehll炸弹:

#!bin/bash
.(){
.|.&
}
.

跳出循环:

break 跳出循环
continue 跳出当前的循环
exit 结束整个脚本


echo $RANDOM
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export 
HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
shred -n 31337 -z -u file_to_delete

SHELL编程基础(三)》有6个想法

发表评论