|
1 循环(命令执行...但参数会变)
如以下形式:
#!/usr/bin/env bash
#encoding=utf-8
a="
value1
value2
value3
value4
value5
value6
"
for i in $a
do
echo "cmd $i argv"
done
注意: $a 不能写成"$a",否则只能成为一个变量,不能成为被迭代的循环
2 使用系统自带函数,颜色输出
#!/bin/bash
. /etc/init.d/functions
if grep -q swap /etc/fstab;then
action "系统存在swap分区" /bin/true
else
action "系统不存在swap分区" /bin/false
fi
注意:
1 使用的是系统库functions中的函数
2 /bin/true返回码($?)是0,/bin/false 返回码是1
3 携带在functions脚本中的环境变量
# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH
3 命令块一起执行----花括号的作用之一
#!/bin/bash
[ -d /data/ ] && {
cd /data
touch 1
rm -f 1
}
注意:
1 {} 一定要分行写或者带空格,并且cmd后面一定要有分号{ cmd1; cmd2; cmd3; },{cmd1; cmd2; cmd3}这个格式是错误的
2 与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,所以避免使用小括号作为命令组,小括号会新开的一个shell,所以小括号中的变量不能被后面继续使用
参考:http://blog.csdn.net/tttyd/article/details/11742241
4 大括号的展开--发括号的作用二
展开,以逗号进行分隔展开
touch {1,2,3}.txt 连续的扩展展开以..分隔顺序列表的起始
# echo {a..c}.txt
a.txt b.txt c.txt
注意:大括号中不允许存在空格
5. ssh的自动化选项
ssh $ip -o UserKnownHostsFile=/dev/null -o ConnectTimeout=3 -o BatchMode=yes -o StrictHostKeyChecking=no 6 screen
screen -S name 创建一个这样的窗口 虚拟终端
screen -ls
screen -r name/id 恢复窗口
ctrl +a +d 退出但不关闭窗口
ctrl +a +k 杀掉当前会话窗口
ctrl +a +z 将这个会话挂起回到 SHLVL=1 的状态(fg 1 恢复)
screen -d pid/name 将这个窗口置为离线
echo $SHLVL 可以检查是不是在窗口中还是在正常的shell终端中
screen -x 多个人同时可以看处于Attached的窗口动态(适合远程多个人需要看屏
幕)
注: screen 中会话的三种状态
1 Attached 处于运行当中的,如果你要 screen -x name/pid 可以看
2 Detached 处于离线的 screen -r name/pid 可以恢复到那个窗口
3 Dead 处于被kill -9 pid 杀死的,如果需要移除 screen -wipe pid/name
7 shell中生成进度条的函数
function sleepPrograss() {
[ $# -eq 0 ] && echo "sleepPrograss Usage: sleepPrograss 10 "
[ $# -eq 0 ] && return 1
allTime=$1
strDone=''
stepTime=$(echo "scale=1; $allTime/100" | bc)
for ((i=0; $i |
|
|
|
|
|
|