脚本速查手册"/>
Shell脚本速查手册
Bash 脚本基础
定义变量
定义变量:name=value 需要注意,等号两侧不能有空格;
定义局部变量:local name=value;
定义只读变量:readonly name;
删除变量:unset name。
定义数组
定义数组:
myArray=(value0 value1 value2)
使用数组:
${数组名[下标]}
获取数组所有元素:
${数组名[*]} 或者
${数组名[@]}
获取数组长度
${#array_name[@]} 或者
${#array_name[*]}
运算符
关系运算符
-eq 检测两个数是否相等,相等返回true;
-ne 检测两个数是否不想等,不相等返回true;
-ge 检测左边的数是否大于右边的,如果是,则返回true;
字符串运算符
= 检测两个字符串是否相等,相等返回true;
!= 检测两个字符串是否不相等,不相等返回true;
-z 检测字符串长度是否为0,为0返回true;
-n 检测字符串长度是否不为0,不为0,则返回true;
$ 检测字符串是否为空,不为空返回true。
脚本控制流程
if 控制
if condition
thencommand;
fi
if else 控制
if condition
thencommand;
elsecommand;
fi
if-else-if-else控制
if condition1
then command1
elif condition2
thencommand2
elsecommandN
fi
For循环
for var in item1..itemN
docommand
done
While循环
while condition
do command
done
Until循环
until condition
docommand
done
Case(Switch)控制
case 值 in
value1)command1;;
value2)command2;;
esac
Bash 脚本进阶
定义函数
[function] funname [()]
{action;[return int;]
}
其中
- funtion 关键词可带可不带;
- funname 根据实际需要定义;
- return int 根据需要加入。
函数参数
- 调用函数传递的参数可以在函数中以 $1的方式获取;
- 使用$1的方式仅可用于前10个参数;
特殊参数
- $0 文件名;
- $# 传递到脚本和函数的参数个数;
- $* 以一个单字符串显示所有向脚本传递的参数;
- $$ 脚本允许的当前进程ID号;
- $? 显示最后命令退出状态,0表示没有错误,其他任何值表明有错误。
文件包含
文件包含
# 写法1
. filename # 注意点号和文件名中间有空格
# 写法2
source filename
Base 脚本编写常用命令
以下是编写Bash脚本的常用命令,你可以根据自己的需要进行选择。
sort
sort 命令是用例对内容进行排序的,可以将文本、数字进行排序。
- sort path/to/file 对文件内容进行升序排序;
- sort --unique path/to/file 对文件内容进行唯一排序;
echo
echo 命令是用来输出内容的。
- echo “my path is $PATH” 输出包含环境变量的信息;
- echo “hello world” >> {{file.txt}} 在文件尾部追加内容;
read
read 命令是用来获取用户输入内容,即标准输入设备(键盘)输入的内容。
-
read -a arrayname 把单词清单读入arrayname的数组里;
-
read -p “Enter your input here:\n” $variable 提示,并读入数据设置给变量;
-
while read line;do echo “$line”;done 按行读取内容,并执行命令;
mapfile
从标准输入读取行并赋值到数组。
-t 表示移除尾随行分隔符,默认是换行符
既然是读取标准输入,常见的就有以下几种读取形式:
$ mapfile myarr <alpha.log # 1.输入重定向
$ mapfile myarr < <(cat alpha.log) # 2.进程替换
shift
shift 命令可以用于将函数得参数移除,其他参数向前移动。
getopts
getopts 命令是一个内置变量,一般用在循环中。每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE这个变量中。比如:
while getopts ":co" opt; docase "$opt" in"c")echo "command1";;"o")echo "command2";;"*")echo "other command";;esac
done
sed
基本用法:sed + 选项 + “指令” 文件
-i 表示直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改
-n 表示取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行
--打印1到5行
sed -n '1,5p' 1.txt
other
${variable:?} 表示检验变量是否为空
eval也可以用于回显简单变量,不一定时复杂变量。如 test.txt内容:hello shell world!
myfile="cat test.txt"
eval echo $myfile #result:hello shell world!
Base 脚本调试
1、启用 Shell 脚本调试模式的方法
下面是主要的 Shell 脚本调试选项:
-v
(verbose 的简称) - 告诉 Shell 读取脚本时显示所有行,激活详细模式。-n
(noexec 或 no ecxecution 简称) - 指示 Shell 读取所有命令然而不执行它们,这个选项激活语法检查模式。-x
(xtrace 或 execution trace 简称) - 告诉 Shell 在终端显示所有执行的命令和它们的参数。 这个选项是启用 Shell 跟踪模式。
第一个机制是改变 Shell 脚本首行,如下,这会启动脚本调试。
#!/bin/sh 选项
其中, 选项可以是上面提到的一个或多个调试选项。
第二个是使用如下调试选项启动 Shell,这个方法也会打开整个脚本调试。
$ shell 选项 参数1 ... 参数N
第三个方法是使用内置命令 set
去调试一个给定的 Shell 脚本部分,如一个函数。这个机制是重要的,因为它让我们可以去调试任何一段 Shell 脚本。
启用调试模式:
$ set -选项
禁用调试模式:
$ set +选项
比如:
#!/bin/bash
#script to print brief system info
ROOT_ID="0"
DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`
check_root(){if [ "$UID" -eq "$ROOT_ID" ]; thenecho "You are not allowed to execute this program!"exit 1;fi
}
#turning on and off debugging of check_root function
set -x ; check_root; set +x ;
推荐阅读
如何入门 Bash 编程
编写更好 Bash 脚本的 8 个建议
Linux 中高效编写 Bash 脚本的 10 个技巧
更多推荐
Shell脚本速查手册
发布评论