shell脚本

        shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面控制系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序

shell脚本基本介绍

格式要求

  1. 脚本要以 #!/bin/bash 开头,debain需要改成#!/bin/dash
  2. 脚本需要有可执行权限

shell常用执行方式

  • 输入脚本的绝对路径或相对路径(该方式首先要赋予脚本执行权限)
    • 说明:首先要赋予脚本的 +x 权限,再执行脚本
    • 比如: ./hello.sh 或者 /home/shcode/hello.sh

  • sh+脚本 不用执行赋予脚本执行权限也可以执行
  • #!/bin/bash 开头的需要 bash+脚本

shell的变量

变量介绍

1.Linux Shell中的变量为,系统变量和用户自定义变量。

2.系统变量: $HOME, $PWD, $SHELL, $USER等等,比如:echo $HOME 等

3.显示当前Shell中所有变量: set

变量定义

  1. 定义变量:变量名=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量 ,静态变量不能unset
  4. 变量命名规则:

变量名称可以由字母,数字和下划线组成,但是不能以数字开头。 等号两侧不能有空格 变量名称一般习惯为大写

将命令的返回值赋给变量

1.A=`date`反引号,运行里面的命令,并把结果返回给变量A

2.A=(date)等价于反引号

export 变量名=变量值 (功能:将Shell变量输出为环境变量)

source 配置文件 (功能:让修改后的配置信息立即生效)

echo $变量名 (功能:查询环境变量的值)

    5.shell注释规则

:<<!内容! (多行)

# 内容(单行)

 设置环境变量

  1. export 变量名=变量值 将shell变量输出为环境变量/全局变量
  2. source 配置文件 将修改后的配置信息立即生效

位置参数变量 

当我们执行一个Shell脚本时,如果希望获取到命令行参数的信息,就可以使用到位置参数变量。

比如: ./mushell.sh 100 200,这个就是一个执行Shell的命令行,可以在myshell 脚本中获取到参数信息。

基本语法

$n (功能描述:n为数字,$0代表命令本身(脚本名),$1-9 代表第一到第九个参数,十以上的参数需要用到大括号包含,如${10})

$S (功能描述: 这个变量代表命令行中所有参数,$*把所有的参数看成一个整体)

$@(功能描述:这个变量也代表命令行中所有的参数,不过把$@每个参数区分对待)

$# (功能描述: 这个变量代表命令行中所有参数的个数)

 预定义变量

Shell设计者事先已经定义好的变量,可以直接在Shell脚本中使用。

基本语法

$$ (功能描述:当前的进程号(PID))

$? (功能描述: 后台运行的最后一个进程的进程号(PID))

$! (功能描述: 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个数由命令自己决定),则证明上一个命令执行不正确了)

 运算符

"$((运算式))" 或 "$[运算式]" 或 expr m + n

注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``

expr \*,/,% 乘,除,取余 

#!/bin/bash
#案例1:计算(2+3)*4
#第一种
R1=$(((2+3)*4))
#第二种
R2=$[(2+3)*4]
#第三种
T=`expr 2 + 3`
R3=`expr $T \* 4`

 条件判断

[ condition ] 注意condition前后要有空格

非空返回true,可使用$?验证(0为true,>1为false)

判断语句 

  1. = 字符串比较
  2. 两个整数的比较
    • -lt 小于
    • -le 小于等于
    • -eq 等于
    • -gt 大于
    • -ge 大于等于
    • -ne 不等于
  3. 按照文件权限进行判断
    • -r 有读的权限
    • -w 有写的权限
    • -x 有执行的权限
  4. 按照文件类型进行判断
    • -f 文件存在并且是一个常规文件
    • -e 文件存在
    • -d 文件存在并是一个目录

流程判断

1.if判断

#!/bin/dash
if[ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi

注意事项:[ 条件判断 ] 中括号和条件判断式之间必须有括号
应用案例 

#!/bin/dash
if [ $1 -ge 60 ]
then
    echo "及格了"
elif [ $1 -lt 60 ]
then
    echo "不及格"
fi
# 执行命令 bash xxx.sh

2.case语句

case $变量名 in

"值1")

如果变量的值等于1,则执行程序1

;;

"值2")

如果变量的值等于2,则执行程序2

;;

...省略其他分支...

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac

案例 :

当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”

 

3.for循环 

基本语法

for 变量 in 值1 值2 值3...

do

程序

done

for ((初始值;循环控制条件;变量变化))

do

程序

done

案例:

#!/bin/dash
a=(10 20 30 40)
for (( i=0; i<4; i++))
do
echo ${a[i]}
done

shell中数组用括号包围,数和数之间用空格间隔

4.while循环

基本语法

while [ 条件判断式 ] (有空格)

do

程序

done

 案例:从命令行输入一个num,计算从1加到num是多少

#!/bin/dash
SUN=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM

 read读取控制台输入

基本语法:read 【选项】 【参数】
选项:

  • -p指定读取值时的提示符
  • -t指定读取值时等待的时间(秒)

参数:指定读取值的变量名
案例:读取控制台输入值并输出输入值的平方

#!/bin/dash
read -p "请输入一个数num=" NUM
NUM1=$[$NUM*$NUM]
echo "num的平方=$NUM1"

函数 

1.系统函数

basename 函数

语法:basename 【文件路径】 【后缀】
功能:返回完整路径最后/的部分,常用于获取文件名字
后缀:若后缀被指定,将会去除相应后缀

dirname函数

语法:dirname 【文件绝对路径】
功能:返回完整路径最后/的前面的部分,常用于返回路径部分

2.自定义函数 

[ function ] funname [()]
{
    Action;
    [return int;]
}

 案例:

#!/bin/dash
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "n1=" n1
read -p "n2=" n2
getSum $n1 $n2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值