文章目录
shell 基础入门
shell 解释器哪儿?
etc/shells 目录下
脚本格式
脚本以 #!/bin/bash 开头(指定解析器)
脚本的执行方法
第一种执行方法:
bash 绝对路径/相对路径
sh 绝对路径/相对路径
第二种执行方法:
绝对路径/相对路径
如果执行不通过可以使用 chmod 命令执行
两者的区别:
前者本质是 bash 解释器帮你执行脚本,所以脚本不需要执行权限。后者是脚本需要自己执行,所以需要执行权限
chmod 的用法
https://blog.csdn.net/lyy14011305/article/details/76333041
shell脚本之多命令处理
脚本内容:在 ./Library/study/shell/texts/basic_1/ 下创建一个 banzhang.txt,在 banzhang.txt 文件中增加“I love you”
#!/bin/bash
cd ./Library/study/shell/texts/basic_1/
touch banzhang.txt
echo "I love you" >>banzhang.txt
变量
常用系统变量(区分大小写)
- $HOME 获取家目录的至
- $PWD 当前目录的值
- $SHELL 默认解析器
-
- $USER 当前命令
自定义变量
-
声明变量+赋值
直接赋值即可(等号左右两边不能有空格)
-
撤销变量
upset <变量名>
-
声明静态变量
readonly <变量名>
注意:不能用unset,该变量是只读变量,只能将虚拟机重启才能删除
-
export(将变量提升至全局变量)
export <变量名>
eg. 前提是helloworld.sh 中已经传进去一个变量值
变量的声明规范
- 变量名称可由字母、数字和下划线组成,不能以数字开头。(环境变量名建议大写)
- 等号两侧不能有空格
- 在bash中,变量默认是字符串类型,无法直接进行数值运算
- 变量的值如果有空格,需要使用双引号或单引号括起来
系统特殊变量
$n
- $n,n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数需要用打括号
$#
- 获取所有输入参数的个数,常用于循环
$*
- 这个变量代表命令行中所有的参数,$* 把所有参数看成一个整体
$@
- 这个变量代表命令行中所有的参数,$@ 会把每一个参数区别对待
$?
- 判断上一条命令是否正确执行:
变量值为0,正确执行
变量值非0(具体数值由命令自己决定),执行不正确
运算符
基本语法
-
“ ( ( 运 算 式 ) ) ” 或 " ((运算式))” 或 " ((运算式))”或"[运算式]"
-
![](https://img-blog.csdnimg.cn/20210219232457629.png
-
expr +,-,*,/,% 加,减,乘,除,取余
注意:expr 运算符间要有空格 -
实战
(1)计算 3+2 的值
(2)计算 3-2 的值
(3)计算 3乘2 的值
(4) 计算(3+2)* 4 的值
a. 采用 expr 的方式
ymtdeMBP-4:basic_1 ymt$ expr `expr 3 + 2` \* 4
20
b. 采用 $[运算式] 的方式
条件判断
1. 基本语法
[ condition ] (注意:condition 前后都要有空格)
条件非空即为 true,[ atguigu ] 返回true,[] 返回false
2. 常用判断条件
(1)= 字符串比较
符号 | 判断 |
---|---|
-lt | 小于(less than) |
-le | 小于等于(less equal) |
-eq | 等于(equal) |
-gt | 大于(greater than) |
-ge | 大于等于(greater equal) |
-ne | 不等于(Not equal) |
(2)按照文本权限进行判断
符号 | 判断 |
---|---|
-r | 有读的权限(read) |
-w | 有写的权限(write) |
-x | 有执行的权限(execute) |
(3) 按照文件类型进行判断
符号 | 判断 |
---|---|
-f | 文件存在并且是一个常规的文件(file) |
-e | 文件存在(existence) |
-d | 文件存在并且是一个目录(directory) |
3. 实战
(1)23是否大于22
(2)判断 helloworld.sh 是否具有写权限
(3)判断目录或者文件是否存在
4. 多条件判断
- && 于
- || 或
流程控制
if 判断
- 基本语法
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须要有空格
(2)if 后要有空格
- 实战
(1)输入一个数字,如果是1,则输出 banzhangzhenshuai ,如果是2,则输出 hahaha, 如果是其他则什么都不输。
case语句
- 基本语法
case $变量名 in
"值1")
如果变量的值等于值1,执行程序1
;;
"值2")
如果变量的值等于值2,执行程序2
;;
...........可无限加case........
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意:
(1)case行尾必须是单词“in”,每一个模式匹配必须以右括号")“结束。
(2)双分号”;;" 表示命令序列的结束,相当于 java 中的 break
(3)最后的 “*)” 表示默认模式,相当于 java 中的 default
- 实操
(1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出xuewei,如果是其他则输出tongxue
for 循环
- 语法1:
for((初始者))