1.shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
2.Shell Hello world
2.1基本格式要求
- 脚本以
#!/bin/bash
开头 - 脚本有可执行权限
2.2第一个shell脚本
touch hello.sh
chmod 744 hello.sh
vim hello.sh
#!/bin/bash
echo "hello,world!"
2.3两种执行方式
-
./hello.sh
(推荐使用方式) -
sh ./hello.sh
:这种方式不需要赋予可执行执行权限
3.shell 变量
3.1.系统变量
- 常见:
$HOME
、$PWD
、$SHELL
、$USER
等等 - 显示所有系统变量命令:
set
3.2.自定义变量
- 定义变量规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
2)等号两侧不能有空格
3)变量名称一般习惯为大写
- 基本语法
1)定义变量:变量=值
2)撤销变量:unset变量
3)声明静态变量:readonly变量,注意:不能unset(删除变量)
- 举例
# 1.定义一个变量,并把它撤销
A=100
echo "A=$A"
unset A
echo "A=$A"
# 2.定义一个静态变量
readonly B=2
echo "B=$B"
unset B #注意静态变量不能撤销
echo "B=$B"
- 将命令的返回值复制给变量
1)A=ls-1a’反引号,运行里面的命令,并把结果返回给变量A
2)A=$(ls-1a)等价于反引号
3.3.设置环境变量
- 基本语法
1)export 变量名=变量值(功能描述:将shell变量输出为环境变量)
2)source 配置文件(功能描述:让修改后的配置信息立即生效)
3)echo $变量名(功能描述:查询环境变量的值)
- 举例
1.在/etc/profile文件定义一个TOMCAT_HOME环境变量
2.使定义的环境变量生效
source /etc/profile
3.查询环境变量
4.shell中调用
3.4.位置参数变量
介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell.sh100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
基本语法
-
$n
(功能描述:n为数字,$0
代表命令本身,$1-$9
代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) -
$*
(功能描述:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体) -
$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) -
$#
(功能描述:这个变量代表命令行中所有参数的个数)
举例
编辑一个shell脚本在脚本中获取各个参数信息
#!/bin/bash
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
3.5.预定义变量
介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
-
$$
(功能描述:当前进程的进程号(PID)) -
$!
(功能描述:后台运行的最后一个进程的进程号(PID)) -
$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
举例
在一个shell脚本中简单使用一下预定义变量
#!/bin/bash
echo "当前进程=$$"
#./shell4.sh &
echo "最后进程=$!"
echo "执行的值$?"
4.数组
介绍
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由0开始。
语法
array_name=(value1 ... valuen)
举例
#定义一个数组并输出每一个值
arr=(1 2 "A")
echo "${arr[0]}"
echo "${arr[1]}"
echo ${arr[2]}
#获取数组长度
echo "${#arr[*]}"
echo "${#arr[@]}"
#给数组赋值
arr1[0]=A
arr1[1]=B
arr1[2]=C
#获取所有数组元素
echo "${arr1[*]}"
echo "${arr1[@]}"
#for循环遍历数组
for i in "${!arr1[*]}";
do
echo $i
done
5.运算符
5.1基本语法
-
$((运算式))
或者$[运算式]
-
expr 运算式
expr运算符之间要有空格
expr 2 \* 3 2x3
expr 6 / 3 6➗3
expr 7 % 2 取余
5.2举例
#!/bin/bash
#计算2x3的值
R1=$((2*3))
echo "R1=$R1"
#计算2*3的值
R2=$[2*4]
echo "R2=$R2"
#先计算2+3,再用原来的结果乘以3
TEMP=`expr 2 + 3`
R3=`expr $TEMP \* 3`
echo "R3=$R3"
6.条件判断
三种类型
- if
if condition
then
command1
command2
...
commandN
fi
- if else
if condition
then
command1
command2
...
commandN
else
command
fi
- if else if
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
举例
- if
if [ "ok" = "ok" ]
then
echo "equal"
fi
- if else
A=2
if [ $A=2 ]
then
echo "===="
else
echo "!====="
fi
- if else if
if [ $1 -gt 1 ]
then
echo "$1大于1"
elif [ $1 -lt 1 ]
then
echo "$1小于1"
fi
case
#案例1:当命令行参数是1时,输出“周一”,是2时,就输出”周二”,其它情况输出“other"
case $1 in
"1")
echo "星期一"
;;
"2")
echo "星期二"
;;
*)
echo "其他"
;;
esac
循环
- for循环
#打印命令行输入的参数
for i in "$*"
do
echo "the num is $i"
done
#--------------
#计算从1加到100的值并输出
SUM=0
for((i=0;i<100;i++))
do
SUM=$[$sum+$i]
done
echo "SUM=$SUM"
- while循环
#案例1:从命令行输入一个数n,统计从1+..+n的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$(($SUM+$i))
i=$[ $i+1 ]
done
echo "sum=$SUM"
函数
#第一个
function add(){
echo "hello world"
}
#调用
add
# 传参数
function fun(){
echo "第一个参数$1"
echo "第二个参数$2"
echo "参数列表$*"
echo "参数个数$#"
}
fun 1 2 3
#返回结果
function funReturn(){
read -p "请输入第一个参数" n1
read -p "请输入第二个参数" n2
return $[$n1+$n2]
}
funReturn
echo "输入的两个参数相加的结果:$?"