[TOC]
shell脚本模板大全
1、目标
- 帮助参数说明
- 判断脚本运行时输入参数,包括切割
- Linux命令执行
- 命令执行是否成功判断
- Linux命令执行后对结果进行切割
- 函数的使用
- 输入输出
- 调用其他shell脚本
2、容易犯的错
- 等号左右两边不能有空格
- 中括号左右两边要有空格
- 字符串中使用变量值时必须使用双引号
- 变量调用时建议使用大括号圈起来
- 第一行很重要
- 记得要添加执行权限
- 最可气的是在windows下面开发记得要进行换行符转换
3、题目要求
要写一个神马脚本呢??? 先把基本功能实现了,再来进行完善。
帮助参数说明:usage() 输入参数:是否从文件读取ip还是手动输入ip(-f ip_addr_filename)
脚本框架
- ip_addr.txt
- result.txt
- ping_ip.sh
#!/bin/bash
# 变量定义
path=`pwd`
echo $path
# 版本信息
version()
{
echo "version: 1.0"
}
# 用法说明
usage()
{
cat << EOF
Usage: $0 [options] [directroy]
Options:
-h, 显示帮助信息
-V, 显示当前脚本版本信息
-f file, 从文件读取ip地址
Examples:
$0 -f ip_addr.txt
EOF
}
4、读写文件
按行读取文件
1 2 3 4 5
I'm OK
interesting
8578587
#!/bin/bash
# 方法一:while循环中执行效率最高,最常用的方法。
while read line
do
echo $line
done < test.txt
# 方法2 : 重定向法;管道法: cat $FILENAME | while read LINE
cat test.txt | while read line
do
echo $line
done
for line in `cat test.txt`
do
echo $line
done
保存文件
使用>是覆盖保存到文件 使用>>是追加保存到文件
注释或者cat输出重定向
EOF或者EOT都可以,并不是需要指定什么字符串。 注意:最后的结束字符一定要在最左边,能缩进。
set命令
set -x与set +x指令用于脚本调试 set -x 开启 set +x关闭(默认)
你写的每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。 这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。如果要增加可读性,可以使用set -o errexit,它的作用与set -e相同。 set -e set +e
shell
printf输出
echo输出
变量不加引号、加单引号、双引号
REPOPATH=git@github.com:github/test.git
REPOPATH = git@github.com:github/test.git (错误,等号两边不能有空格,系统会把变量当作命令,提示REPOPATH未找到)
脚本的编写
!/bin/bash
变量定义(目录、路径、flag...)
usage(){}
usage()
{
cat << EOT
Usage: $0 [options] [directroy]
Options:
-i install
-u update
-h help(usage) and exit
Examples:
$0 -i dir
EOT
}
各种函数
cd $(dirname $0) ===== cd `dirname $0`
参数判断
#!/bin/bash
if [ $# -lt 2]; then # 必须至少两个
echo "error.. need args"
exit 1
fi
echo "command is $0"
for arg in "$@":
do
echo $arg
done
while getopts "" opt
while getopts ":i:u:h" opt # 冒号表示安装目标的文件夹
do
case ${opt} in
i)
su (需要输入管理员密码)
sudo su(只需要输入当前用户的密码)
su root转换到root账户 ===== su (账户密码,及root)
内网wifi:TP未限速
桌面巡检工具
$?获取上一个命令的退出状态
function kill_lock_process()
{
local lock_pid=$(lsof /var/lib/dpkg/lock | grep /var/lib/dpkg/lock | awk '{print $2}')
if [ -n "${lock_pid}" ]; then
kill -9 ${lock_pid}
dpkg --configure -a
fi
}
# 等于0执行成功,不等于0执行失败
kill_lock_process
if [ $? -ne 0 ]; then # 执行失败
kill_lock_process
fi