Linux中的Shell编程

这篇具有很好参考价值的文章主要介绍了Linux中的Shell编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux中的Shell编程

shell编程快速入门

为什么要学习Shell编程?
1.Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
2.对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3.对于大数据程序员来说,需要编写Shell程序来管理集群。

Shell是什么?
Shell 是一个命令解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
Linux中的Shell编程,Linux,linux,运维,服务器

Shell编程快速入门?
进入Linux终端,编写一个 Shell 脚本 hello.sh :

#!/bin/bash 
echo 'hello world!'

Linux中的Shell编程,Linux,linux,运维,服务器

使用vim命令可以直接创建并编写一个文件。如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

运行:

# 方法1
sh hello.sh

# 方法2
sudo chmod +x hello.sh
./hello.sh

Linux中的Shell编程,Linux,linux,运维,服务器
Linux中的Shell编程,Linux,linux,运维,服务器
从上面的两张图片中可以看出,每种方式都会成功输出hello world!

说明:

  • #! 告诉系统这个脚本需要什么解释器来执行。
  • 文件扩展名 .sh 不是强制要求的。
  • 方法1 直接运行解释器,hello.sh 作为 Shell 解释器的参数。此时 Shell 脚本就不需要指定解释器信息,第一行可以去掉。
  • 方法2 hello.sh 作为可执行程序运行,Shell 脚本第一行一定要指定解释器。

Shell变量

定义
Shell 变量分为系统变量自定义变量。系统变量有$HOME, $PWD, $USER等,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
像上面这些都是系统变量,我们可以通过set显示所有的系统变量,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
比如我们还可以输出一下系统变量BASH的值,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

像上面都是linux当中的系统变量,但在linux中我们用的比较多的还是自定义变量,自定义变量的基本语法

  • 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写
  • 删除变量:unset 变量名 。
  • 设置只读变量:readonly 变量名,相当于设置了只读,其实也就是说变量值第一次设置之后后续就不能修改了。
  • 使用变量:$变量名

定义一个shell脚本test2.sh测试变量的使用,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
执行shell脚本的结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
还有一个点需要注意一下,当我使用sh test2.sh执行shell脚本的时候,第二个B变量没有输出出来,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
因此使用./test2.sh命令执行shell脚本,要比使用sh test2.sh命令执行脚本要强大的,以后尽量使用./test2.sh的方式执行shell脚本。

位置参数变量

基本语法

  • $n:$0代表的是命令本身、$1-$9代表从第1个参数到第9个参数,10以上参数用花括号 ${10}
  • $*:命令行所有参数,且把所有参数看成一个整体
  • $@:命令行中所有参数,且把每个参数区分对待
  • $#:所有参数个数

实例如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
执行test5.sh这个shell脚本的结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
注意$0的时候并不会把参数也输出。

运算符

基本语法

  • $((运算式))或 $[运算式]
  • expr m + n 注意expr运算符间需要有空格,如果希望将expr的结果赋值给某个变量,需要使用反引号,如TEMP=`expr 2 + 3`
  • expr \* , /, %分别代表乘,除和取余,注意这里的乘的符号比较特殊

定义一个test3.sh案例如下:
Linux中的Shell编程,Linux,linux,运维,服务器
执行test3.sh这个shell脚本的结果,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

条件判断

基本语法

# [ condition ] 注意condition前后要有空格。非空返回0,0为true,否则为false。
# 可能出现的情况大致如下
if [ 条件表达式 ]
then
	程序
fi

if [ 条件表达式 ]
then
	程序
else
	程序
fi

if [ 条件表达式 ]
then
	程序
elif [ 条件表达式 ]
then
	程序
else
	程序
fi

编写一个test4.sh例子,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
运行test4.sh这个shell脚本的结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

case分支

基本语法

case $变量名 in

值1)
程序1
;;

值2)
程序2
;;

值3)
程序3
;;

*)
如果变量值不等于上面列出的所有列,则执行此处程序
;;

esac

例子如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
测试test6.sh这个shell脚本的执行结果,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

for循环

基本语法

# 语法1
for 变量名 in 值1 值2 值3...
do
	程序
done


# 语法2
for ((i=1;i<=100;i++)
do
	程序
done

实例如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
test7.sh这个shell脚本的运行结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

while循环

基本语法

while [ 条件判断式 ]
do
	程序
done

实例输出1加到100的值,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
test8.sh这个shell脚本文件执行结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

函数

和其它编程语言一样,Shell 编程有系统函数和自定义函数。

系统函数
第一个系统函数是basename函数,这个函数可获取绝对路径下面最后面的文件名字;
第二个系统函数是dirname函数,这个函数可获取绝对路径下文件的路径,其实也就是去掉了后面的文件名字;
使用如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
一个是用来获取文件名,一个是用来获取文件的项目路径。

自定义函数
基本语法

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

实例如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
执行test9.sh这个shell脚本的结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

shell编程里面的函数可以加参数吗?
与大部分编程语言不同,Shell 中函数在定义时不能指定参数,但在调用时可以传递参数。传递参数给函数:在函数名后面以空白分隔给定参数列表即可,如:testfunc arg1 arg2 … ; 在函数体中当中,可使用$1, 2 , … 调用这些参数;还可以使用 2, …调用这些参数;还可以使用 2,调用这些参数;还可以使用@, $*, $#等特殊变量。

函数后面传递参数的例子,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
接着执行我们的test10.sh这个shell脚本,看看执行结果是什么,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

nohup命令

基本概念

nohup 命令 用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由Command 参数和任何相关的Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用nohup 命令运行后台中的程序。要运行后台中的nohup 命令,添加& ( 表示”and”的符号)到命令的尾部。

nohup指不断地运行,是no hup up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。什么意思呢?就是使用nohup在linux上启动一个部署的项目之后,即便你退出重新登录linux服务器了,服务器上面的项目也是启动状态的,不用你重新启动了就。

个人理解:先理解成nohup是用来运行程序jar包的,如果我们想要在windows上面启动一个程序,那么我们直接在idea里面点运行就行了,但是在linux上面我们如果想要启动一个程序要怎么办呢?可以直接使用命令 java -jar 程序jar包,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
可以发现我们启动的时候启动参数错了,这是为什么呢?来看一下我们启动主类中的代码,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
那么我们启动程序的时候怎么配置启动参数呢?以及JVM的启动参数堆内存栈内存等?可以使用nohup进行启动,在命令后面直接跟上启动参数就行了,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器

当上面的shell脚本启动之后,就可以在linux上面启动我们的程序了。因此,shell脚本在linux上面可以用来启动linux上面部署的项目。

使用eval命令把其中一个文件里面的配置输出到另外一个shell脚本的变量里面

首先我们创建一个file.txt文件,内容如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
接下来我们在shell脚本里面可以通过eval命令直接把这个文件中的变量输入到shell脚本对应的变量中,我们创建一个test9.sh脚本,内容如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
当我们执行上面的shell脚本的时候,输出的三个变量值,其实就是我们在file.txt文件里面定义的三个变量值,输出结果如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
可以发现这里脚本执行的结果是和file.txt文件中配置的信息一致的。

特别注意shell脚本里面不要关闭其它web项目的进程

使用shell脚本启动一个项目的时候,如果当前项目已经启动了,那么需要先查出来当前项目的进程号id,然后把这个进程杀死;注意查询进程id的时候,要加上当前项目的特征,比如可以在grep后面直接加上当前项目的jar包,用来进行筛选,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器
使用 ps -ef | grep 你的项目特征 | grep -v grep | awk ‘{print $2}’ 命令可以筛选出来你的项目的进程号,如下图:
Linux中的Shell编程,Linux,linux,运维,服务器文章来源地址https://www.toymoban.com/news/detail-738409.html

到了这里,关于Linux中的Shell编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell脚本——服务器巡检(自动化运维)

     目的   自动 获取集群内 多个主机 的内存、磁盘、cpu等信息 生成日志  准备    VMware虚拟主机IP在同一个网段(互相能ping通)             虚拟主机都有公钥免登录            修改主机IP  vi/etc/sysconfig/netwoek-scripts/ifcfg-ens160            设置主机名 hostnamectl set-ho

    2024年02月15日
    浏览(55)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(98)
  • 【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

    业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 连上服务器后,在任意位置都可以执行: crontab -e 如果没有进入 编辑cron任务模式 根据提示查看我们的服务器上是否未安装crontab没有则

    2024年02月14日
    浏览(60)
  • linux并发服务器 —— linux网络编程(七)

    C/S结构 - 客户机/服务器;采用两层结构,服务器负责数据的管理,客户机负责完成与用户的交互;C/S结构中,服务器 - 后台服务,客户机 - 前台功能; 优点 1. 充分发挥客户端PC处理能力,先在客户端处理再提交服务器,响应速度快; 2. 操作界面好看,满足个性化需求; 3.

    2024年02月09日
    浏览(75)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(94)
  • Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令

    为了实现 DHCP 服务器的 IP 存储、回收和查询机制,我们需要将服务器中 LXD 容器的网卡 IP 查询出来,并且存储到服务器中的 Mysql 中。所以,下面介绍如何通过 Java 远程连接 Linux 服务器以及操作多条 Shell 命令。 创建 Maven 项目,导入依赖 jsch 实现远程连接,往后我们只需要调

    2024年02月13日
    浏览(51)
  • 【Linux高性能服务器编程】——高性能服务器框架

      hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍,在这篇文章中, 你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了解网络编程技术!!! 希望这篇

    2024年04月25日
    浏览(62)
  • Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月02日
    浏览(55)
  • 华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏

    本章节内容,我们主要介绍华为云耀服务器L实例,从云服务的优势讲起,然后讲解华为云耀服务器L实例资源面板如何操作,如何使用宝塔运维服务,如何使用运维工具可视化安装nginx,最后部署一个自研的H5的小游戏(6岁的小朋友玩的很开心😁)。 前端的同学如果想把自己

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包