shell 是一个命令解释器,为用户提供一个向Linux内核发送请求的以便程序的界面系统级程序,用户可以用shell来启动,挂起、
停止甚至是编写一些程序。
1.1、脚本格式要求
1)脚本以#!/bin/bash开头
2)脚本需要有执行的权限
脚本的常用执行方式
方式1(输入脚本的绝对路径或者相对路径)
1)首先线赋予脚本的x权限 chmod 744 shelll.sh
2)执行脚本 ./shell.sh(相对路径) /root.shell/shell.sh (绝对路径)
1.2 shell的变量
1)Linux Shell中的变量分为系统变量和用户自定义变量
2)系统变量:$HOME 、$PATH、$PWD、$SHELL、$USER
echo $HOME
1.2.1、变量的定义
基本语法:
1)定义变量:变量=值
2)撤销变量:unset 变量
3)声明静态变量:readonly变量,注意:不能unset
例1:
A=100
echo "A=$A"
unset A
echo "A=$A"
例2:
readonly A=100 #定义和使用静态变量
echo "A=$A" #静态变量不能unset
unset A
echo "A=$A"
1.2.2定义变量的规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2)“=”等号两侧不能有空格
3)变量名称一般习惯为大写
1.2.3 将命令的返回值赋给变量(重点)
1)A=`ls-la`反引号 ,运行里的领命,并把结果返回给变量A
2)A=$(ls-la)等价于反引号
例1:
1.3设置环境变量
1.3.1基本语法
1)export 变量名 = 变量值 (功能描述:将shell变量输出为环境变量)
2)source配置文件 (功能描述:让修改后的配置信息立即生效)
3)echo $变量名 (功能描述:查询环境变量的值)
1)在/etc/profile 文件中配置JAVA_HOME环境变量
1.4位置参数变量
1.4.1介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:./myshell.sh 100 200 ,这个就是一个执行shell的命令,可以在shell脚本中获取到参数信息
1.4.2基本语法
$n (功能描述:n为数字$0代表命令本身,$1-$9代表第1个到第9个参数,10以上的参数,需要${10})
$* (功能描述:这个变量代表命令行中的所有参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量代表命令行中所有参数,不过$@把每个参数区分对待)
$# (功能描述:这个变量代表命令行中所有参数的个数)
1.5预定义变量
1.5.1基本介绍:
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
1.5.2基本语法
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态,如果为0,证明上一个命令正确执行,若非0)
1.6运算符
1.6.1 基本介绍
学习如何在shell 中进行各种运算操作
1.6.2 基本语法
1)"$((运算式))" 或“$[]”
2)exprt m+n export 运算间要有空格
3)exprt m-n
4)expr \*,/,% 乘,除,取余
例1:
例2:
1.7条件判断
1.7.1基本语法
[condition](注意condition 前后要有空格)
#非空返回true,可以使用$?验证 (0为true,>1为false)
应用实例:
[lyp] 返回true
[] 返回false
[condition] && echo OK || echo notok 条件满足,执行后面的语句
1.7.2常用的条件判断
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2)按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
1.7.2 应用实例
例1:
例2:
例3:
1.7.3流程控制
基本语法
if [条件判断式];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [条件判断]
then
程序
fi
注意:
1)[ 条件判断式 ] ,中括号和条件判断式之间必须有空格
2)推荐使用第二种方式
.应用实例
例1
1.7.4 case语句
基本语法
case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
easc
#!/bin/bash
#案例1:当命令行参数是1时3,输出周一,是2时,输出周二,其他则输出other
case $1 in
"1")
echo '周一'
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
1.7.5 for 循环
基本语法
for 变量 in 值1 值2 值3 ...
do
程序
done
#!/bin/bash
#案例 打印命令行输入的参数
#使用$*
for i in "$*"
do
echo "the num is $i"
done
echo "=============================="
for j in "$@"
do
echo "the sum is $j"
done
例2
#!/bin/bash
# 案例从1加到100的值输出
#定义一个变量
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$[ $SUM+$i ]
echo $SUM
done
echo "sum=$SUM"
1.7.6 while循环
基本语法
while [ 条件判断式 ]
do
程序
done
例1
#!/bin/bash
#案例1:从命令行输入一个数n,统计1+2+。。。。+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
~