栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

shell脚本编程-基础篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell脚本编程-基础篇

在实习的时候用到了shell脚本,并且在面试中手撕代码时也让写过脚本,所以系统的学习了一下shell编程基础,对脚本编程的基础有了一些了解,主要源于bilibili上的视频,有些地方加了一些自己的理解和代码。

第1章 shell概述

shell就是一个用户与操作系统交互的解释器,接收用户命令,然后调用操作系统。shell还是一门脚本编程语言,我们可以使用它编写脚本完成很多操作。

Linux提供的shell解析器有很多,可以使用cat /etc/shells命令查看,centos和Ubuntu的默认解析器都是/bin/bash。

/bin/sh是/bin/bash的软连接。

第2章 Shell脚本入门

一般在编程中使用hello world来学习一门新的语言,下面使用shell来实现hello world,从而了解shell脚本的格式,如何运行。

  1. 编写程序hello.sh
#!/bin/bash
echo "Hello World"

注:脚本以#!/bin/bash开头,指定解析器,在第一章我们看了有哪些解析器

  1. 执行脚本
bash hello.sh
或者
chmod +x hello.sh
./hello.sh

注:第一种是bash去解释脚本,所以脚本本身不需要权限,第二种是脚本需要运行,所以脚本本身需要权限。

第3章 变量 1.系统预定义变量

系统预定义变量是系统预先定义好的某些变量,代表一些特定的意义:如$HOME、$PWD、$SHELL、$USER。系统一启动,就会给他们赋值。

2.自定义变量 1)基本定义

我们可以通过变量名=值来定义变量

如果我们不想使用这个变量了,可以使用unset 变量名来进行一个撤销

如果声明一个静态变量,可以在声明的时候加一个readonly关键字,如果加了readonly就不能撤销。

使用export关键字可以将其设为全局变量,供其他shell程序使用

2)定义规则

可以参考其他语言的变量定义,但是也有一些不同的地方,主要有

等号两侧不能有空格

bash中,变量默认都是字符串类型,无法直接进行数值运算

变量的值如果有空格,需要使用双引号或者单引号引起来。

3.特殊变量

特殊变量是指我们在运行程序的时候用到的一些变量,它的值代表程序的一些运行情况。

1.$n

n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}

比如在第一章的脚本hello.sh中,进行一个简单的修改

#!/bin/bash
echo "$0"

./hello.sh nihao

2.$#

获取所有输入参数个数,不包括脚本本身。

#!/bin/bash
echo "$#"

./hello.sh nihao

3.$*、$@

$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待,可以遍历取出每一个变量

4.$?

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

上面的所有命令执行完成后,使用这个命令发现都是执行成功的,所以就是0;

第4章 运算符

第二章中说过bash中变量赋值都是字符串,比如

所以我们需要在运算时使用运算符,有两种形式,$((运算式))或者$[运算式],比如在上面的操作中,我们加上这两种形式,就可以进行数据的运算。

第5章条件判断

条件判断并不是if语句,而是if语句或者是while等关键字后面的布尔值,条件判断有两种语法,test condition还有[condition]条件不是空的就是true。

常用的条件如下:

字符串比较 =

整数比较 -lt小于 -le小于等于 -eq等于 -gt大于 -ge大于等于 -ne不等于

文件权限比较 -r -w -x

按照文件类型比较 -f文件 -e文件存在 -d文件存在并且是一个目录

多条件判断:&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令

第6章 流程控制(重点)

流程控制主要有四部分,if、case语句、for循环、while循环。

1.if判断
if [ 条件判断式 ];then
  程序
elif [ 条件判断式 ];then
  程序
else
  程序
fi

注:

[ 条件判断式 ],中括号和条件判断式之间必须有空格

if 后要有空格

案例:

#!/bin/bash
if [ $1 -eq "1" ];then
        echo "输入是1"
elif [ $1 -eq "2" ];then
        echo "输入是2"
else
        echo "输入是其它"
fi

2.case语句

case语句作用等同于Java或者C语言中的switch-case语句。

case $变量名 in
	"值1")
		如果变量的值等于1,则执行程序1
		;;
	"值2")
		如果变量的值等于2,则执行程序2
		;;
	*)
		如果以上变量都不是,执行此程序
		;;
esac

注:

1.case 行尾必须是in,每一个模式匹配必须以右括号“)”结束。

2.双分号“;;”表示命令序列结束,相当于java中的break.

3.最后的“*)”表示默认模式,相当于Java中的default。

案例:

#!/bin/bash
case $1 in
"1")
        echo "输入是1"
        ;;
"2")
        echo "输入是2"
        ;;
*)
        echo "输入是其它"
        ;;
esac

3.for循环 1)语法1
for (( 初始值;循环控制条件;变量变化))
do
	程序
done

案例:

#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
	s=$[$s+$i]#之前说过,在shell中变量都是字符串,要想加起来,必须加运算式,使用$[] 或者 $(())两种形式
done
echo $s
2)语法2
for 变量in 值1 值2 值3…
do
	程序
done

案例:打印所有的参数

#!/bin/bash
for i in $*
do
    echo "hello $i "
done

注:

如果$* @ 不 加 引 号 , 他 们 的 作 用 相 同 , 如 果 加 了 引 号 , @不加引号,他们的作用相同,如果加了引号, @不加引号,他们的作用相同,如果加了引号,*就会看作一个整体,$@不看做一个整体,具体实例如下:

#!/bin/bash
for i in "$*"
do
        echo "hello $i "
done

for i in "$@"
do
        echo "hello $i"
done

4.while循环
while [ 条件判断式]
do
	程序
done

案例:

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done
echo $s

第7章read读取控制台输入
read(选项)(参数)
选项:
    -p:指定读取值时的提示符;
    -t:指定读取值时等待的时间(秒)。
参数
	变量:指定读取值的变量名

案例:指定时间内输入爆炸指令,否则取消

#!/bin/bash
read -t 7 -p "输入爆炸指令 " NAME
echo $NAME

第8章函数 1.系统函数

basename

basename [string / pathname] [suffix] basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

注:

1.basename后面可以跟一个字符串,也可以跟一个实际的路径,也就是说string可以是计算机中不存在的某个文件。

2.suffix后缀是可选的,如果指定了后缀,后缀会被去掉

案例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J32GtZiP-1636173045469)(D:oneDrive - stu.qlu.edu.cn2-大数据8-shellimgsimage-20211106121306850.png)]

第二个指定了后缀,所以在最终的输出结果中就没有.txt后缀。

dirname

dirname 文件绝对路径 从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)),与basename正好相反。

案例:

2.自定义函数

基本语法:

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

注:

1.必须在调用之前先声明,否则会报错

2.函数返回值只能通过$?系统变量获得,可以显示加return返回,如果不加,则以最后的一条命令添加,return 后面跟数值n(0-255)。

案例:计算两个数的和

#!/bin/bash
function sum()
{
        s=0
        s=$[ $1 + $2 ]
        echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;


基础篇就到这里,实战篇会总结一下自己实习的使用,结合看得视频中的一些例子,使用一些函数及shell工具来处理一些简单的事情。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号