一、简介
概念:
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
通过shell语法编写的可以通过shell执行的代码称之为shell脚本。
第一个Shell脚本
1.创建一个shell文件
vi hellworld.sh
2.编写内容:
#!/bin/bash
echo "hello world"
3.执行:两种方式
第一种:sh 脚本文件名 直接执行:sh hellworld.sh
第二种:加上helloworld.sh 脚本的+x 权限:chmod 777 helloworld.sh
执行:./ helloworld.sh
二、语法
1.注释
Shell中的注释以“#”号开头,所有以“#”号开头的代码都会被解释器所忽略
2.变量
Linux Shell 中的变量分为,系统变量和用户自定义变量
系统变量
$HOME、$PWD、$SHELL、$USER 、$JAVA_HOME等
自定义变量
基本语法
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注意:不能 unset
定义变量的规则
1. **变量名称可以由字母、数字和下划线组成,但是不能以数字开头。**
2. **等号两侧不能有空格**
3. 环境变量名称一般习惯为大写
4. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
5. 变量的值如果有空格,需要使用双引号或单引号括起来
预定义变量:shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令 执行不正确了。)
3.运算符
“$((运算式))”或“$[运算式]”
expr + , - , \*, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
4.条件判断
条件成立返回0 代表true 条件失败返回1 代表false
常见判断
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)
5.流程控制
if判断
单分支
if 条件表达式 ;then
命令
fi
多分支
if 条件表达式 ;then
命令
else
命令
fi
多条件
if 条件表达式 ;then
命令
elif 条件表达式 ;then
命令
else
命令
fi
for循环
for 变量名 in 取值列表
do
命令
done
while 循环
while 条件表达式 ; do
命令
done
break和continue语句
continue 与 break 语句只能循环语句中使用;
break:终止循环,运行针跳至done后;
continue :跳出当前循环,运行针跳至do后,开始下一循环;
break:
#!/bin/bash
N=0
while [ $N -lt 10 ]; do
let N++
if [ $N -eq 5 ]; then
break
fi
echo $N
done
continue:
#!/bin/bash
N=0
while [ $N -lt 10 ]; do
let N++
if [ $N -eq 5 ]; then
continue
fi
echo $N
done
6.读取控制台输入内容
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
7.函数(方法)
由函数名 返回值 参数组成,linux shell 可以用户定义函数,然后在shell脚本中可以随便调用
[function]函数名字 () {
CMD #函数体
}
例:
#!/bin/bash
function A () {
echo "hello world"
return 1
# return 会终止函数 return下的所有代码不会再执行
echo "hello world"
}
# 执行A
A
8.函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
#!/bin/bash
A(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
A 1 2 3 4 5 6 7 8 9 34 73
参数处理
# 说明
$# -->#传递到脚本或函数的参数个数
$* --># 以一个单字符串显示所有向脚本传递的参数
$$ -->#脚本运行的当前进程ID号
$! -->#后台运行的最后一个进程的ID号
$@ -->#与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- -->#显示Shell使用的当前选项,与set命令功能相同。
$? -->#显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
例: