- Shell 是一个命令行解释器,它接收应用程序、用户命令,然后调用操作系统内核。
shell 还是一个功能强大的编程语言,易编写、易调试、灵活性强。 - 1.脚本格式
脚本以 #!/bin/bash 开头(指定解析器) - 反引号`在shell中的应用:表示在``内部的为命令
eg: echo `date`
- Shell中的变量
- 定义: 变量=值 (等号两侧不能有空格)
变量=‘值’
变量=“值”
- 撤销变量:unset 变量
- 静态变量:readonly 变量, (不能unset)
- 在bash中,变量默认类型是字符串类型,无法直接进行数值计算
- 可把变量提升为全局环境变量,供其他shell程序使用
expot 变量名
- 特殊变量:$n $#
- $n (功能描述:n为数字,$0代表脚本名称,$1-$9代表第1到第9个参数,10及以上的参数需要用大括号包含,如${10})
#! /bin/bash
echo “$0 $1 $2”
-
- $# (功能描述:获取所有输入参数的个数,常用于循环)
- $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
-
- $? (功能描述:最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量为非0(具体哪个数由命令自己来决定),则证明上一个命令执行错误。)
- 运算符
- 基本语法
“$((运算式))” 或 “$[运算式]”
Expr +,-,*,/,% (加,减,乘,除,取余)
注意:expr 运算符两侧要有空格 eg:expr 2 - 1
- 条件判断
- [ condition ] (注意:condition前后要有空格)
条件非空即为true,[ atguigu ]返回true,[] 返回 false
- 两整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(great than)
-ge 大于等于(greater equal) -ne 不等于(not equal)
- 按照文件权限进行判断
-r 读权限(read) -w 写权限(write)
-x 执行权限(execute)
- 按照文件类型进行判断
-f 文件存在并且是常规文件(file) -e 文件存在(existence)
-d 文件存在并且是一个目录(directory)
- 多条件判断(&&表示前一条命令执行成功时才执行后一条命令,||表示上一条命令执行失败后才执行下一条命令;(类似C中的 “与”“或”的执行逻辑))
[ condition ] && echo “ok” || echo “not ok”
[ condition ] && [ ] || echo “not ok”
- 流程控制
- if语句
if [ 条件判断式 ];then
程序
elif [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
(注意:[ 条件判断式 ],中括判断式前后要有空格)
- case语句
case $变量名 in
“值1”)
如果变量的值等于值1,则执行
;;
“值2”)
如果变量的值等于值2,则执行
;;
…
*)
如果变量的值不等于以上,则执行
;;
esac
(注意:case行尾必须为单词“in”,每一个匹配模式必须以右括号“)”结束
双分号“;;”表示命令行序列结束,相当于C中的break
最后的“*)”表示默认模式,相当于C中的default)
- for循环
语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
语法2
for 变量 in 值1 值2 ...
do
程序
done
- while循环
while [ 条件判断式 ]
do
程序
done
- read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒)
参数:
变量:指定读取值的变量名
- shell输入/输出重定向
command > file 将输出重定向到 file。(新内容会替代旧内容)
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。(新内容加在文件末尾)
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
- 系统函数
- basename 基本语法
basename [string / pathname] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个‘/’字符,然后将文件名显示出来,即 抹去路径名提取文件名)
选项:
suffix为后缀,如果suffix被定义了,basename会将pathname或string中的suffix去掉。
- dirname基本语法
dirname文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名,只保留路径然后返回)
- 自定义函数
- 基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
注: 必须在调用函数之前声明函数,shell脚本是逐行执行的;
函数返回值只能通过$?系统变量获得,可以显示加 return 返回,如果不加,将以最后一条命令运行结果作为返回值。 return 后面跟数值n(0-255);
- shell 工具
- cut
cut [选项参数] filename
选项参数:
-f 列号,提取第几列 (eg:-f 1 -f 1,2 -f 2-6 取第1列 第1,2列 第2到6列)
-d 分隔符,按照指定分隔符分割列
说明: cut的工作就是‘剪’,在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字符、字节和字段输出。
默认分隔符为制表符。
-
- sed
sed [选项参数] ‘command’ filename
选项参数:
-e 直接在指令列模式上进行sed的动作编辑
命令功能:
a 新增,a的后面可以接字符串,在下一行出现
d 删除
s 查找并代替
sed是一种流编辑器,一次处理一行内容。处理时将当前处理的行存储在临时缓冲区中,成为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复直到文件末尾,文件内容没有改变,除非用重定向存储输出。
-
- awk
awk [选项参数] ‘pattern1{action1} pattern2{action2} ...’ filename
pattern: 表示awk在数据中查找的内容,就是匹配模式(正则表达式)
action: 在找的匹配内容时执行的一系列命令
选项参数:
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量