目录
如何创建一个shell文件:
1、概括
shell脚本就是一堆命令的集合,将多个命令写到一块,一起执行。
2、创建:后缀名一般为: .sh
①vim +文件名.sh
②编辑shell脚本
开头写:#!/bin/bash
目的:告诉计算机使用哪个版本的shell来解析我们代码
③运行1.sh文件
会发现我们的权限不够
我们可以给这个文件加可执行权限
这两种方法都可以:chmod是给文件加减权限用的
再./1.sh就可以运行了
shell变量
1、自定义变量
shell允许用户建立 变量存储类型,但它不支持数据类型,任何被赋值给变量的值都被解释为一串字符。
命名和C语言差不多
1、由数字、字母、下划线组成。不能以数字开头。
2、在shell中通常用大写字母写
echo和C语言中的print类似,后面会详细介绍
取变量的值时,要在变量前面加$
在shell中字符串用双引号或者单引号都可以
2、位置参数
shell中参数可以用$1 $2 $3 ....$n表示,在执行文件后面输入要执行的参数
如果$超过9,比如10要加括号,不然计算机会当成$1来处理
$1-$10会根据你的实参参数进行输出
3、 预定义变量
$#:包含命令行参数的个数
$@:包含所有的命令行参数
$*:包含所有的命令行参数
$@和$*的区别
$?:包含前一个命令的退出状态,正常退出返回0,反之为非0 (shell中,0为真,非0为假)
创建成功会返回0;
shell程序和语句
1、输出
echo: 自带换行
echo -n:不带换行
在下面输入里演示
2、输入
1、read +空格加入输的变量就可以
2、加提示语输入两种
①用echo加提示语
②用read -p来增加一条提示语
(1)紧跟输入提示语后面
提示语输入完要加空格,不然就会这样
(2)换行输入变量
(3)如果只有两个变量,但输入的三个字符串怎么办
如果想前面NUM1有两个字符串
shell中实现加减乘除取余
expr用于简单的整数运算,包括+、-、\*、/、%,切记shell中的*法要加\
注意:expr和变量以及变量和运算符之间必须添加空格
在Shell中,反引号 ` ` 是一种用于执行命令并将其输出作为字符串返回的方法。键盘tab建上面那个键
test测试
一般在中括号中执行[ ],[]里面两边必须空格
测试字符串
s1 = s2 测试两个字符串的内容是否完全一致
echo $?返回如果相等输出0,不相等输出非零数
s1 != s2 测试两个字符串的内容是否有差异
测试整数
a -eq b 测试a与b是否相等
a -ne b 测试a与b是否不相等
a -gt b 测试a是否大于b
a -ge b 测试a是否大于等于b
a -lt b 测试a是否小于b
a -le b 测试a是否小于等于b
利用前面讲的传参方法,$1和$2相等返回0,不相等返回非0.
测试文件属性
-d name 测试name是否一个目录
-e name 测试name是否存在
-f name 测试name是否普通文件
-L name 测试name是否为链接文件
-r name 测试name文件是否存在且可读
-w name 测试name文件是否存在且可写
-x name 测试name 文件是否存在且为可执行
-s name 测试name 文件是否存在且其长度不为0
其他类似
shell控制语句
选择语句
单分支选择语句
if [ ]
then
语句
fi
双分支选择
if [ 表达式 ]
then
语句1
else
语句2
fi
案例:
- 请输入一个文件名,判断他是否为普通文件如果是普通文件,判断它是否有写的权限如果有写的权限,向文件中写入“hello world”如果没有写的权限,给它添加写的权限,然后再写入“hello world”
多分支结构
if [表达式1]
then
语句1
elif [表达式2]
then
语句2
...
elif [ 表达式n ]
then
语句n
else
语句n+1
fi
case
case 字符串变量 in
模式1)
命令表1
;; //类似与break,但是;;不能省略,最后一个可以省略
模式2 | 模式3)
命令表2
;;
.........
模式n)
命令表n
;;
*)//类似于c中的default
命令表n+1
;;
esac
案例:
- 请输入想要下载的文件的名字,让用户确认是否下载这个软件Y:(正在下载改软件)下载 N软件:打印取消下载,直接退出
循环语句
for语句
for 变量 in 单词表
do
语句
done
方法1:
方法2:{}花括号中不能有变量 {1..10}I从1增加到10,中间只能有两个点 {10..1}从10减到1
方法3:
案例:输出1-10所有的奇数
方法4:
案例: 打印九九乘法表
while语句
while [表达式]
do
语句
done
打印九九乘法表
注意:
比较两个字符串时 =两边用空格隔开
赋值时,=两边不留空