ssh 192.168.4.5
>提示continue,连接过的主机不会提示
>连接过的主机 文件存放位置:/root/.ssh/known_hosts

#####################################################################
字符串的截取:
# X=1383838438
# echo $X
1383838438
# echo ${X}
1383838438
# echo ${#X}
10

第一种
${var:起始位置:长度},从第0位开始
${X:0:4}
${X:3:6}
${X::4}

对下面的数随机取一为做随机密码:
# X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
# n=$[RANDOM%62]     26小写字母+26大写字母+10个数字=62  
# echo ${X:$n:1}

X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
pass=''
for i in {1..6}
do
  n=$[RANDOM%62]    #26小写字母+26大写字母+10个数字=62
  tmp=${X:$n:1}
  pass=${pass}$tmp
done
echo $pass

第二种
expr substr $变量 开始位 长度
# X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
# expr substr $X 2 3      #从第1位开始数,没有第0位
bcd
# expr substr $X 1 3
abc

第三种
echo $变量|cut -b 开始位置-结束位置
echo $X |cut -b 2-5
echo $X |cut -b 3,8,11
########################################################################

vim 替换
    :s/old/new

# X=1383838438
# echo ${X/3/#}     /表示替换一个数,这里代表将第一个3替换成#
1#83838438
# echo ${X//3/#}    //表示替换所有的数,这里代表将所有的3替换成#
1#8#8#84#8
注意这种替换并不改变X变量的值
# echo $X
1383838438

掐头、去尾
${变量#}     掐头
${变量%}    去尾

# X=`head -1 /etc/passwd`
# echo $X
root:x:0:0:root:/root:/bin/bash
# echo ${X#*:}              一个#代表最短的*:内容  掐掉开头
x:0:0:root:/root:/bin/bash
# echo ${X##*:}             两个##代表最长的*:内容  掐掉开头
/bin/bash

# echo ${X%:*}              一个%代表最短的*:内容  去掉尾巴
root:x:0:0:root:/root
# echo ${X%%:*}             两个%%代表最长的*:内容  去掉尾巴
root

##############################################################
echo ${变量:开始:长度}    截取
echo ${变量/old/new}      替换
echo ${变量#}             掐头
echo ${变量%}             去尾
echo ${变量:-}             初始化

touch {a、b、c、d、e、f}.txt

批量重命名:将.txt改为.doc
for i in `ls *.txt`
do
   mv $i ${i%.*}.doc
done

###############################################################

数组:一个变量存多个值
X=(11 22 33 aa bb cc)
# echo ${X[0]}
11
# echo ${X[1]}
22
# echo ${X[4]}
bb
# echo ${X[*]}
11 22 33 aa bb cc

##############################################################
非交互式发送邮件
echo "内容" |mail       #不需要文件  
mail < 文件                       #需要另外一个文件,内容可以很复杂

yum -y install expect 非交互的工具expect
vim test.sh
mail -s error root << EOF    end of life
内容
内容
内容
......
EOF
#############################################################

#!/bin/bash
rm -rf /root/.ssh/known_hosts     #所有已经连接过的主机存储为这个位置,删掉后会>提示未连接过的主机,要不要继续远程登录
expect << EOF
spawn ssh 172.25.0.10
expect "continue" {send "yes\n"}
expect "passwd" {send "redhat\n"}
expect "#"      {send "touch /a.txt\n"}
expect "#"      {send "exit\n"}
EOF

3个问题
  1、continue的问题
rm -rf /root/.ssh/known_hosts     #所有已经连接过的主机存储为这个位置,删掉后会>提示未连接过的主机,要不要继续远程登录
    2、超时问题
set timeout
    3、最后一行不执行

####################################################################################
正则表达式:使用特殊符号去表达的一种方式
^   开始
$   结尾
[]   集合、取之一

[abcdef56789]==[a-f,5-9]==[5-9,a-f]
[abc]==[cba]==[bac]==[bca]==[cab]==[acb]

[^]   对集合内容取反
.      任意单个字符,同?
*     匹配前一个字符出现了任意次
.*    匹配任意长度的任意所有
\{n,m\}   匹配前一个字符出现了n到m次  
\{n,\}    匹配n个以上的(包括n个)
\{n\}     匹配n个   
        grep a\{3,5\} 匹配3到5个a; grep a\{3,\} 匹配3个以及3个以上的a; grep a\{3\} 匹配3个a

#####################################################################################
unset 变量    #清除变量的值
[a-Z]==[a-z,A-Z]

扩展正则表:(简化基本,扩展新的)
{2,5\}----------------->{2,5}
(\)                         ()
*任意次                   ? 前面的字符出现0次或1次
                               +  前面的字符出现至少1次
()整体                      (abc)+
                 abc  abccc  abccccc...
|或者                        (test|taste)

扩展正则:写的简单,兼容性差(支持正则的不一定支持扩展)
基本正则:写的麻烦,兼容性强(几乎所有支持正则的都支持)
 
grep不支持扩展正则  
egrep支持扩展正则
grep -E 扩展正则  用grep调用egrep来支持扩展正则

egrep "\bthe\b" txt   #\b代表单词边界
###################################################################################
\(\)      保留(复制)
()          保留(复制)
\1        将保留的第一个复制出来

vim a.txt
    abcdefabcdefabcdefabcdef
grep "(abcdef)\1\1\1" a.txt  将()里面的保留内容复制粘贴3遍  所有的字母都变红

vim a.txt
    abcdefabcdeffqwerfqwer
grep "(abcdef)\1(fqwer)\2" a.txt  将第一()里面的保留内容复制粘贴1遍;将第二()里面的保留内容复制粘贴1遍  所有字母都变红

vim a.txt
hello the world
ni hao ya
san li tun jian
把第一个字母和最后一个字母对调
sed -r 's/^(.)(.*)(.)$/\3\2\1/' a.txt

Shell4的更多相关文章

  1. shell--4.echo和printf

    1. echo (1) echo ,显示普通字符串 echo "HelloWorld" 打印:HelloWorld (2) \ ,显示转义字符串 echo "\" ...

  2. 自学Linux Shell4.1-监测程序ps top kill

    点击返回 自学Linux命令行与Shell脚本之路 4.1-监测程序ps top kill 1. PS命令 linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的 ...

  3. 自学Linux Shell4.2-监测磁盘空间mount umount df du

    点击返回 自学Linux命令行与Shell脚本之路 4.2-监测磁盘空间mount umount  df du 1. 挂载存储媒体mount  移除存储媒体umount ls命令用于显示文件目录列表, ...

  4. 自学Linux Shell4.3-处理数据文件sort grep gzip tar

    点击返回 自学Linux命令行与Shell脚本之路 4.3-处理数据文件sort grep gzip tar ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时 ...

  5. shell-4.bash的变量:用户自定义变量

    目录 内容

  6. Linux 数组

    200 ? "200px" : this.width)!important;} --> :介绍 在shell4.0之后支持普通数组和关联数组,普通数组只能使用整数作为索引,关 ...

  7. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结

    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...

  8. [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】

    第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...

  9. [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】

    第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...

随机推荐

  1. 【NOIP2019模拟2019.11.13】旅行 && GDKOI2018 还念(二分答案+dij)

    Description: 题解: 显然满足二分性. 并且每一条边要不选l要不选r. 二分的那条链肯定要选l. 考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快. 安 ...

  2. UNP学习 ioctl操作

    一.ioctl函数 #include <unistd.h> int ioctl(int fd, int request, ... /* void * arg */); 返回:成功0,出错- ...

  3. UNP学习第五章

    一.概述 想要写一个完整的TCP客户-服务器程序例子,有下面功能的回射服务器 1.客户从标准输入读一行文本,写到服务器上: 2.服务器从网络输入读此行,并回射给客户: 3.客户读此回射行并写到标准输出 ...

  4. linux IPC socket(3)server简单写法

    写server的一些流程总结 一.向内核申请一个socket TCP形式 sock_fd = socket(AF_INET, SOCK_STREAM, ); UDP形式 sfd = socket(AF ...

  5. 【LeetCode 37】解数独

    题目链接 [题解] 回溯法搞一下. 用set和数组下标判重. [代码] class Solution { public: set<int> myset[9]; int hang[9][10 ...

  6. [CSP-S模拟测试62]题解

    A.Graph 因为点可以随便走,所以对于每个联通块,答案为边数/2向下取整. 用类似Tarjan的方式,对于每个联通块建立一棵搜索树,尽量让每一个节点的儿子两两配对,如果做不到就用上头顶的天线. # ...

  7. SQL必知必会——插入数据(十五)

    1.数据插入 INSERT用来将行插入(或添加)到数据库表.插入有几种方式: 插入完整的行插入行的一些部分插入某些查询的结果注意:1.使用INSERT语句可能需要客户端/服务端DBMS中的特定安全权限 ...

  8. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  9. [STemWin教程入门篇]第二期:emWin5.xx的详细移植步骤

    转自:http://bbs.armfly.com/read.php?tid=1545 重要说明:(0)由于这个移植教程是去年过年的时候做的,用的是5.16,这就不再做个5.20的移植了,方法是一样的. ...

  10. JS-监听整个页面上的DOM树变化

    # [在线预览](https://jsfiddle.net/1010543618/fyf913t0/) ## 方法 - 使用<Web API 接口>的<MutationObserve ...