首页 > 系统相关 >Linux-Shell编程【看这一篇就够了!!!】

Linux-Shell编程【看这一篇就够了!!!】

时间:2024-09-09 12:21:21浏览次数:8  
标签:shell 变量 就够 echo 语法 Shell Linux 输入

目录

前言

什么是Shell编程

Shell脚本的执行方式

脚本格式要求

运行一个Shell

一个Shell例子

Shell的变量

shell变量的定义

设置环境变量

简单示范

位置参数变量

预定义变量

基本语法

运算符

应用案例

条件判断

单流程判断

常用判断条件

应用案例

多流程判断

case语句判断

for循环

while循环

read读取控制台输入

应用实例

函数

系统函数

basename

应用实例

dirname

 应用实例

自定义函数

应用实例

前言

Linux操作系统在虚拟机VM上的安装【CentOS版本】-CSDN博客

Linux-(系统启动、用户管理)-CSDN博客

Linux-实用指令-CSDN博客

Linux-【组管理、权限管理、定时任务调度】-CSDN博客

Linux-进程管理【重点】-CSDN博客

Linux-RPM与YUM-CSDN博客

什么是Shell编程

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

Shell脚本的执行方式

脚本格式要求

  • 脚本以“#!/bin/bash”开头
  • 脚本需要有可执行权限
  • Shell脚本文件的后缀名以“.sh”结束

运行一个Shell

运行shell脚本有两种方式:

  • 输入脚本的绝对路径或相对路径来执行(需要有文件的写权限):例如:./hello.sh /root/hello.sh
  • sh + 脚本(不需要有脚本写权限):如:sh hello.sh

一个Shell例子

  • 创建一个名为“hello.sh”脚本文件
  • 运行脚本后输出“hello world”

Shell的变量

  • Linux shell中的变量分为:“系统变量”和“用户自定义变量”
  • 系统变量:$HOME、$PWD等等
  • 显示当前shell所有的变量:set

shell变量的定义

基本语法:

  • 在shell中使用“#”注释
  • 使用shell变量,在前面加上“$”符号
  • 定义变量:变量名 = 值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量(静态变量不能使用unset撤销)

注意:

  • shell变量定义时,“=”左右两边不能有空格,即“A=2”是正确的,“A = 2”是错误的
#!/bin/bash
#定义变量A
A=100
echo A = $A
echo "A = $A"
#撤销变量A
unset A
echo "A = $A"
#定义静态变量B,不能unset
readonly B=2
echo "B = $B"
unset B

执行效果:

将命令的返回值赋给变量:

  • A=`date`(反引号),运行里面的指令,并把结果返回给变量A
  • A=$(date),等价于反引号
#!/bin/bash
#将当前日期赋值给A
A=`date`
#将一句话赋值给B
B=$(echo "123")
#输出A和B
echo "这是A:$A"
echo "这是B:$B"

效果:

设置环境变量

基本语法:

  • export 变量名=变量值(将shell变量输出为环境变量/全局变量)
  • source 配置文件(让修改后的配置立即生效)

简单示范

  • 在/ect/profile文件中定义TOMCAT_HOME环境变量(找个空白处写上即可)
  • 查看环境变量TOMCAT_HOME的值
  • 输入TOMCAT_HOME变量(在使用前,需要使用source /etc/profile让其生效)

 

位置参数变量

当执行一个shell脚本时,如果希望收到命令行的参数信息,就可以使用位置参数变量

如:./mysehll.sh 100 200,这执行一个shell命令行,也可以在myshell脚本中获取到参数信息

基本语法:

  • $n:n为数字,$0表示命令本身,$1-$9表示第一到第九个参数,10以上的参数需要使用大括号包含:${10}
  • $*:代表命令行中所有参数
  • $@:代表命令行中所有的参数,不过$@把每个参数区分对待
  • $#:代表命令行中所有参数的个数
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数个数=$#"

效果:

预定义变量

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

基本语法

  • $$:当期那进程的进程号
  • $!:后台运行的最后一个进程的进程号PID
  • $?:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行。如果这个变量的值非0,证明上一个命令执行不正确

运算符

基本语法:

  • “$((运算式))”或“$[运算符]”或“expr m + n”
  • 注意expr运算符之间要有空格
  • *、/、%:乘、除、取余

应用案例

  • 计算(2+3)*4的值
#!/bin/bash
#计算(2+3)*4的值
#第一种方式
RES1=$(((2+3)*4))
echo "RES1 = $RES1"
#第二种方式[推荐使用]
RES2=$[(2+3)*4]
echo "RES2 = $RES2"
#第三种方式
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "RES4 = $RES4"

条件判断

单流程判断

基本语法:

if [ condition ](注意condition的前后要有空格)

then [condition]

fi

常用判断条件

  • =:字符串比较
  • -lt:小于
  • -le:小于等于
  • -eq:等于
  • -gt:大于
  • -ge:大于等于
  • -ne:不等于
  • -r:对文件有读权限
  • -w:对文件有写权限
  • -x:对文件有执行的权限
  • -f:文件存在并且是一个常规文件
  • -e:文件存在
  • -d:文件存在并且是一个目录

应用案例

  • “ok”是否等于“ok”,使用“=”
  • 23是否大于22,使用“-ge”
  • /root/test.sh文件是否存在,使用“-f”或“-e”
#!/bin/bash
#"ok是否等于"ok"
if [ "ok" = "ok" ]
then
        echo "相等"
fi

#23是否大于22
if [ 23 -ge 22 ]
then
        echo "大于"
fi

#/root/test.sh文件是否存在
if [ -f /root/test.sh ]
then
        echo "存在"
fi

多流程判断

if [ condition ](注意condition的前后要有空格)

then [condition]

elif [ condition ]

then [condition]

fi

case语句判断

基本语法:

case $变量名 in

"值1")

condition

;;

"值2")

;;

esac

for循环

语法1:

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

do

程序/代码

done

语法2:

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

do

程序/代码

done

 

while循环

基本语法1:

while [ 条件判断式 ]

do

程序/代码

done

read读取控制台输入

基本语法:

read(选项)(参数)

选项:

-p:指定读取值的提示符

-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待

应用实例

  • 读取控制台输入一个NUM1值
  • 读取控制台输入一个NUM2值,在10秒内输入
#!/bin/bash
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
read -t 10 -p "请输入一个树NUM2,在10秒内输入" NUM2
echo "你输入的NUM2=$NUM2"

 

函数

shell编程和编程语言一样,有系统函数,也可以自定义函数。

系统函数

basename

功能:

返回完整路径最后“/”的部分,常用于获取文件名

语法:

basename [pathname] [suffix]

选项:

suffix为后缀,如果suffix被指定,basename会将pathname中的suffix去掉

应用实例

  • 返回 /home/aaa/test.txt的“test.txt”部分:

dirname

功能:

返回完整路径最后“/”的全面的部分,常用于返回路径部分

语法:

dirname 文件绝对路径

 应用实例

  • 返回/home/aaa/test.txt的“/home/aaa”部分

自定义函数

基本语法:

[ function ] function_name [()]

{

        action;

        [return int;]

}

调用直接写函数名:“function_name [值]

应用实例

  • 计算输入两个参数的和,getSum
#!/bin/bash
#自定义函数getSum
function getSum()
{
        SUM=$[$n1+$n2]
        echo "和是=$SUM"
}
#输入两个值
read -p "输入一个数n1=" n1
read -p "输入一个数n2=" n2
#调用自定义函数getSum
getSum $n1 $n2

效果:

标签:shell,变量,就够,echo,语法,Shell,Linux,输入
From: https://blog.csdn.net/zheshiyangyang/article/details/142051849

相关文章

  • 标题:Linux的基本命令
    一:Shell的命令提示符的认识  shell:命令解释器  格式:命令+选项+参数用户名:root 密码:0412327命令提示符的解释试着解释一下命令提示符用户名:xya0412  主机名:localhost 当前目录:/home $:当前用户为普通用户修改主机名为:diaomao命令:touch 创建文件......
  • pmap: 命令查看 Linux 中进程的内存使用情况
    在Linux系统中,了解进程的内存使用情况对于调试和优化程序非常重要。pmap命令是一个强大的工具,可以帮助你查看进程的内存映射和使用情况。本文将介绍如何使用pmap命令来获取这些信息,并解释输出结果的含义。什么是pmap命令?pmap是一个Linux命令行工具,用于报告进程的内存......
  • 从STM32的定时器到Linux上的时间相关服务
    难题:在baremetal上实现按钮点击、长按事件起因是因为我想用stm32加几个按钮只做一个我自己的控制器,我可以通过按钮执行一些功能。硬件是如何和CPU通信的呢?CPU上支出几个GPIO引脚,这些引脚可以配置为输入模式和输出模式,并且都有两种状态——高电平和低电平。硬件连接这些引脚,你编......
  • Shell 随笔3
    If语法if[condition]thencommandsfiifthenelseif[condition]thencommandselsecommandsfiifthenelseifif[condition]thencommands1elifthencommands2......else......
  • 深入探索嵌入式 Linux
    摘要:本文深入探究嵌入式Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。......
  • shell脚本
    shebang以#!开头的文件,程序会在执行时会调用/bin/sh,bash的解释器。默认使用/bin/sh执行。也可指定使用解释器,如:/bin/bash/pythonhello.py执行脚本的方式bashscript.sh或者shscript.sh,文件本身没有执行权限的方法。使用绝对路径或相对路径,需要文件有执行权限。shel......
  • linux中unattended-upgr是什么
    linux中unattended-upgr是什么,如何关闭ldcaws于2024-06-1714:09:47发布阅读量1.2k收藏2点赞数4分类专栏:Linux文章标签:linux版权Linux专栏收录该内容25篇文章2订阅订阅专栏unattended-upgrades是Ubuntu操作系统自动更新软件包的一个进程。它默认开启,定期检查可......
  • linux安装python3(源代码安装)
    相关软件安装python3安装源代码安装下载python3源码包比如说python3.9.10:https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz#通过wget下载wgethttps://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz#进行源代码包的解压(xz使用J解压,gz使用......
  • linux用户权限
    用户权限管理关于linux用户现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。普通用户在所分配到的资源内进行各自的操作,相互之间不受影响。但是这......
  • linux命令补充
    linux命令补充加/解压命令tar命令:进行文件的压缩和文件的解压。对于不同的文件解压可以参考中文文档(linux中文手册)。重要参数:压缩包:-c(直接打包不会节省空间,使用压缩工具可以减少文件大小,即下面的-z,-j,-J命令)、解压包:-x、后面输入文件:-f、gz(gzip压缩文件):-z、bz(bzip压缩......