一、注释
单行注释:#
多行注释: :<<! ....!
#!/bin/bash
#单行注释
echo '下一行是多行注释'
:<<!
echo '1'
!
echo '4'
echo "我的脚本名称是:file.sh"
echo "我的脚本名称是:$0"
二、执行脚本
1、执行方式
1.1、bash /path/to /script-name 或 /bin/bash/path/to/script-name(强烈推荐使用)
1.2、/path/to/script-name 或 ./script-name (当前路径下执行脚本)
1.3、source script-name 或 . script-name(注意‘.’点号),主要用于环境变量一致
2、变量
变量分为本地变量、全局变量、shell内置变量
2.1、本地变量:当前系统的某个环境下才能生效的变量,作用域小
本地变量分为:普通变量和命令变量。
普通变量:
方式一:变量名=变量值,变量必须是一个整体,中间没有特殊字符
方式二:变量名='变量名',看到什么就输出什么
方式三:变量名="变量值",可以解析变量
命令变量:
方式一:变量名='命令'
方式二:变量名=$(命令)
执行流程:
1、执行‘或者$()范围内的命令
2、将命令执行的结果,赋值给新的变量名
2.2、全局变量
全局变量就是当前系统的所有环境下都能生效的变量
env查看全局变量
定义全局变量的方式:
方式一:变量=值 export 变量
方式二:export 变量=值
2.3、变量查看和取消
查看变量:
方式一:$变量名
方式二:"$变量名"
方式三:${变量名} 使用频率高
方式四:"${变量名}" 标准使用方式
取消变量:unset 变量名
2.4、shell内置变量
$0 :获取当前shell脚本的文件名,也包括脚本路径
$n :获取当前执行shell脚本的第n个参数值, 当n大于10为${10}
#!/bin/bash
# $n 获取第n个位置参数
echo "当前文件名为:$0"
echo "第一个位置参数是:$1"
三、shell进阶
可以通过$?判断是否执行成果,0成功,非0失败
A:test条件表达式
B:[ 条件表达式 ]
3.1、条件表达式
&&:命令1 && 命令2。命令1成立,命令2才会执行
[ 1 == 1 ] && echo "hello"
||:命令1 || 命令2。命令1成功,命令2不执行,命令1失败,命令2执行
[ 1 == 2 ] || echo "hello"
-f :判断输入内容是否是一个文件
[ -f zhushi.sh ] && echo "是一个文件"
-d:判断文件是否为目录
[ -d aa ] && echo "是一个目录"
-x :判断输入文件是否可执行
[ -x zhushi.sh ] || echo "没有可执行权限"
数值操作符:
字符串比较:
str1 == str2 字符串一直
str1 != str2 不一致
3.2、计算表达式
方式一:$(())
方式二:let 计算表达式:
echo $((100/4))
let i=100/4
echo $i
3.3、linux常见符号
3.3.1、重定向
常见重定向符号>和>>
>符号:将符号左侧的内容,以覆盖的方式输入到右侧文件
echo "nihao" >a.txt
>>符号:追加
echo "nihao" >>a.txt
3.3.2、管道符|
命令1|命令2:管道符左侧命令执行后的结果,传递给右侧命令2使用
env | grep SHELL
3.3.3、后台展示符号 &
&就是将一个命令从前台转到后台执行
sleep 2 &
全部信息符号 :2>&1
1:表示正确输出的信息
2:表示错误的输出信息
/bin/bash ceshi.sh 1>log.txt 2>errorlog.txt
/bin/bash ceshi.sh > log.txt 2>&1
3.3、linux系统垃圾桶
/dev/null 是linux下的一个设备文件
这个文件夹类似于一个垃圾桶,特点是容量无限大
四、常见命令详解
grep、sed、awk、find
4.1、grep
grep是强大的文本搜索命令
-c:只输出匹配的行数
-n:先是匹配行及行号
-v:显示不包含匹配文本的所有行
4.2、sed
sed行文件编辑工具 ,编辑文件以行为单位的
sed -i '1s/a/b/g' a.txt
4.3、awk
可以以行和列为单位处理文件
4.4、find
find [路径] [参数] [关键字]
-name 按照文件名查找
-perm 按照文件权限查找
-user 按照文件属主查找
-group 按照文件所属组来查找文件
-type 查找某类型文件