文章

脚本特殊使用方法

1. ssh公钥远程登录首次跳过 yes认证

1
ssh  -o PubkeyAuthentication=yes -o stricthostkeychecking=no

2. 提取字符串中的数字保存到变量中

1
2
3
4
5
6
7
8
匹配数字
echo  "helloworld20180719" | tr -cd "[0-9]"

匹配小写字符
echo  "helloworld20180719" | tr -cd "[a-z]"

匹配大小写字符
echo  "helloworld20180719" | tr -cd "[a-z][A-Z]"

3. 关闭history记录

1
2
set +o history      关闭history记录
set -o history      打开history记录

4. read使用小窍门

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-p  提示输入
-e  在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符
-r 	原样读取(Raw mode),不把反斜杠字符解释为转义字符
-s 	静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
-t seconds 	设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败

====================================================================
1. 提示输入
read -ep "请输入服务编号: " input_view_num

2. 获取多变量
#前提是 return_name返回值返回的是两个值
function return_name()
{
    echo "aaa bbb"
}
read a b < <( return_name )

3.可以对输入的值通过上下键返回
(1).引用bash环境时加 -i,如
    #!/bin/bash -i
    此时会返回shell终端的历史命令
(2). 引用时不加 -i,默认的
    #!/bin/bash
    此时只会翻出当前进程的历史命令

### 最主要的部分
# 原理: 在每一次执行完成之后将命令输出到历史命令中
    read -ep "请输入服务编号: " input_deploy
    history -s "$input_deploy"

5. for循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# for循环
#方法一
for((i=1;i<=10;i++));  
do   
    echo $(expr $i \* 3 + 1);  
done  

#方法二
for i in $(seq 1 10)  
do   
    echo $(expr $i \* 3 + 1);  
done   

#方法三
for i in {1..10}  
do  
    echo $(expr $i \* 3 + 1);  
done  

#方法四
awk 'BEGIN{for(i=1; i<=10; i++) print i}'

####################################################################
#设置不以空格换行
## for 循环时 会以 空格 分割,修改其分割方式 IFS
## 保存当前: IFS_old=$IFS
## 修改以 \n 回车符为分割符: IFS=$'\n'
## 恢复原样: IFS=$IFS_old

IFS_old=$IFS
IFS=$'\n'
for line in  `cat filename`;
do
    echo "$line"
done;
IFS=$IFS_old

6. 秒级定时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第一种: 脚本
#执行间隔
STEP=2
for (( i = 0; i < 60; i=(i+${STEP}) ))
    do
        ping www.baidu.com
        sleep ${STEP}
done


第二种: crontab sleep
crontab -e 
* * * * * /bin/date
* * * * * sleep 20; /bin/date 
* * * * * sleep 40; /bin/date 

本文由作者按照 CC BY 4.0 进行授权