【Linux】 shell脚本的创建及使用 《入门到实践》详解( 建议收藏 )

这篇具有很好参考价值的文章主要介绍了【Linux】 shell脚本的创建及使用 《入门到实践》详解( 建议收藏 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Linux】 shell脚本的创建及使用 《入门到实践》详解( 建议收藏 )

🍁博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!

shell脚本简介

shell 用户与内核沟通的桥梁

shell的分类:

  • 第一类:bash sh csh
  • 第二类:ksh

shell脚本的好处:

将命令按照一定顺序保存到文件中,统一执行

  • 解决重复性的工作
  • 可以避免一些低级错误

一些语言的脚本后缀

  • perl–>.pl
  • python–>.py
  • php–>.php
  • shell–>.sh

编程语言分类:


  • 编译型 C C++
  • 解释型 python shell php

  • 面向对象 python java C++
  • 面向过程 shell C

  • 静态语言:java C
  • 动态语言:shell python

  • 强类型:java python
  • 弱类型:shell C

shell脚本的固定书写

  • 创建shell脚本
#直接进入并写脚本,会自动创建
vim first.sh

#手动创建
touch first.sh
  • #!/bin/bash–>幻数,指定解释器,在每次的shell脚本中的最顶行写
  • # 为注释符
  • echo “Hello world!” 可执行代码,输出Hello world!

如何执行shell脚本

  • bash 文件名或着sh 文件名直接执行脚本,此时不需要加执行权限(bash first.sh/sh first.sh)
bash first.sh
&&
sh first.sh
  • 相对路径或绝对路径执行脚本,此时必须加执行权限(./first.sh)
./first.sh
  • source执行 在当前shell下执行脚本(source first.sh)
source first.sh

推荐使用sh first.sh

shell脚本变量

变量:用字符串表示一个值,用于存储值的位置,这个字符串叫变量名

定义变量:变量名=变量值   python=$(ps -ef | grep -v grep | grep python | wc -l)
调用变量:$变量名       echo $python
删除变量:unset 变量名   unset &python

在shell调用一个未赋值的变量,不会报错,会返回空值;

  • 变量是临时保存在内存中
  • set 查看系统所有的变量

变量的命名规则:

  • 1.变量名要有意义。不要使用a,b,c
  • 2.可以采用驼峰式命名或_隔开的方式
  • 3.命名时应该避开系统的关键字
  • 4.对于常量采用全部大写表示

shell中变量的分类:

  • 预定义变量
  • 位置变量
  • 环境变量
  • 自定义变量

预定义变量:shell中预先设置好的变量,可以直接调用

举例:
就比如我定义一个变量是查找python的进程数量
pyj=$(ps -ef | grep -v grep | grep python | wc -l)
调用的时候这样调用echo $pyj

位置变量:脚本传递的位置参数,默认可以使用$1-$9,不交互传参

  • $0 保存脚本执行的路径
  • $# 保存脚本处理的 参数个数
  • $* 保存脚本处理的所有参数,把参数作为整体进行保存
  • $@ 保存脚本处理的所有参数,把参数作为个体进行保存
  • $$ 保存脚本的PID
  • $? 保存上一条命令执行的状态0代表成功,其他代表不成功(常用)
  • $_ 保存上一条命令的参数

环境变量:
env 查看系统环境变量

自定义变量:默认直在当前shell生效,如果想在其新打开的shell下也生效,可以使用export将变量导出
export 变量名=变量值
变量名=变量值,export变量名

/etc/bashrc
/etc/profile

~/.bashrc
~/.bash_profile

当打开终端时,会默认去读取系统中环境变量设置的文件 /etc/profile

shell脚本的计算

(( )) 只能做整数计算

  • +加
  • -减
  • *乘
  • /除
  • %余
  • 2**5二的五次方

实例:

#!/bin/bash
#加法
jia=$((1+1))
echo $jia

#减法
jian=$((5-2))
echo $jian

#乘法
cheng=$((3*3))
echo $cheng

#除法
chu=$((18/3))
echo $chu

#余数
yu=$((13%2))
echo $yu

#2的3次方
ci=$((2**5))
echo $ci

结果为:

[root@cs ~]# sh cs.sh
2
3
9
6
1
32

[]只能做整数计算(和(())一样)

实例:

#!/bin/bash
abc=$[ 1 + 4 ]
echo $abc

结果为:

5

expr 只能做整数计算(可用于判断是否为整数)

加、减、乘、除、余、次方都可以
使用expr来做计算,计算单位前后都要加空格

#!/bin/bash
expr 10 + 20

结果为:30


也可以用来判断以上结果是否为整数;实例:
(这个可以先看看,后面会教if判断的。)

#!/bin/bash

#交互方式输入数字
read -p "please input is number:" number

#判断是否为整数
expr 10 + $number &>/dev/null

#如果为整数就会返回0,如果不是会返回其他,并打印出来。
if [ $? -ne 0 ];then
	echo "${number}不是合法整数"
	exit 1
else
	echo "${number}是整数"
fi

bc 计算器(可小数点)

echo "3+5"| bc	不交互计算=8

#2为要保留的小数点位数
echo "scale=2;3/5" | bc	保留两位小数=.60

let 整数计算,与(( ))一样

原本a=10,let a++ ,在执行一次ehco $a就=11了

#!/bin/bash

a=10
let a++ 
echo $a

结果为11

主要用于while循环中,变量自增赋值# shell脚本的内置命令

内置命令

echo

echo 将指定内容输出到屏幕上,通常打印变量值,默认是换行打印

echo 参数:

  • -n 不换行打印
  • -e 解释转义字符

(这两个用于echo之后,输出文字之前使用,例如:echo -e “\e[5;44;30mabcabc\e[0m”)

常见的转义字符:

  • \a 响铃
  • \n 换行
  • \r 回车
  • \t 水平制表符(tab)
  • \v 垂直制表符
  • \b 删除前一个字符

(用于输出文字内使用,例如:echo -e "123\n332"换行)

单引号和双引号的区别:

  • 单引号:所见即所得(意思是:看到的是什么,输出的就是什么);
  • 双引号:可以解释$引用的变量

( ) 等于 ‘ ˋ 优先执行里面的指令,一般用于设置变量 p y j = ()等于 \`` 优先执行里面的指令,一般用于设置变量 pyj= ()等于ˋ优先执行里面的指令,一般用于设置变量pyj=(ps -ef | grep -v grep | grep python | wc -l)
pyj2=`ps -ef | grep -v grep | grep python | wc -l`

利用echo输出带颜色的内容:

#使用方法
echo -e "\e[字体控制颜色;字体背景颜色;文字颜色m 字符串\e[0m"
#实例:(输出一个闪烁的;字体背景颜色为蓝色;字体颜色为黑色的abcabc)
echo -e "\e[5;44;30mabcabc\e[0m"
#输出一个字体颜色为绿色的abcabc
echo -e "\e[32mabcabc\e[0m"

常见的字体颜色:重置=0,黑色=30m,红色=31m,绿色=32m,黄色=33m,蓝色=34m,紫色=35m,青色=36,白色=37m。

常见的背景颜色:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,紫色=45,青色=46,白色=47。

字体控制选项:1=高亮,2=一半亮度(暗色),3=斜体,4=下划线,5=闪烁,7=反显,8=隐藏。

注:因为需要使用特殊符号,所以需要配合-e选项来识别特殊符号。

echo 注意事项:

在使用echo命令时,如果输出内容中含有!,不可以使用双引号,只可以使用单引号,因为默认!的作用是调用历史命令记录,除非使用set +H关闭历史命令引用。
set +H 关闭历史命令引用

read

read命令 从标准输入读取内容

read命令参数:

  • -p 打印提示
  • -t 指定超时时间
  • -s 不显示屏幕输入的内容(主要用于输入密码之类的)

在firest.sh中写
例如:

#提示请输入您的姓名:输入完成之后回车即可,该name变量可在其他地方调用
read -p "请输入您的姓名:"  name
echo $name

#提示请输入您的姓名,五秒之内不输入就会自动退出会话,输入完成之后回车即可,该name变量可在其他地方调用
read -t 5 -p "请输入您的姓名:"  name
echo $name

#提示请输入您的姓名,五秒之内不输入就会自动退出会话,输入的时候不显示你输入的内容,输入完成之后回车即可,该name变量可在其他地方调用
read -t 5 -s -p "请输入您的姓名:"  name
echo $name

如果read后没有指定变量名,默认会将参数值传递给REPLY

shell脚本流程控制语句

条件测试(前后都要有空格)

test 条件 或 [ 条件 ]

test anaconda-ks.cfg
[ -f anaconda-ks.cfg ]

文件测试([]前后都要有空格)

  • -f 判断是否为文件
[ -f anaconda-ks.cfg ]
  • -d 判断是否是目录
[ -d /dir1 ]
  • -e 判断文件或目录是否存在
[ -e anaconda-ks.cfg ]
  • -b 判断是否为设备文件
[ -b anaconda-ks.cfg ]
  • -l 判断是否为链接文件
[ -l anaconda-ks.cfg ]
  • -e 判断一个文件是否为空文件
[ -e anaconda-ks.cfg ]

整数测试(常用于if判断中)

  • -eq 等于
  • -ne 不等于
  • -gt 大于
  • -lt 小于
  • -ge 大于等于
  • -le 小于等于

(( )) 可以直接使用符号比较大小

#等于1
if [ $a -eq 1 ]

#不等于1
if [ $a -ne 1 ]

#大于1
if [ $a -gt 1 ]

#小于1
if [ $a -lt 1 ]

#大于等于1
if [ $a -ge 1 ]

#小于等于1
if [ $a -le 1 ]

字符串测试(常用于if判断中)

  • == 等于
  • != 不等于
  • -z 判断字符串是否为空
#等于“测试”
if [ "$a" == "测试" ]

#不等于“测试”
if [ "$a" != "测试" ]

#判断$a参数是否为空
if [ -z "$a" ]

逻辑关系

  • && 与/并且
  • || 或
  • ! 非
#判断1不等于1,成立输出0,不成立输出1
[ 1 -ne 1 ] && echo 0 || echo 1	

shell中字符串操作

求变量字符串长度:

  • 1.echo ${#变量名}
#!/bin/bash

a=12345678
echo ${#a}

输出结果为:8

  • 2.echo $变量名 | wc -L
#!/bin/bash

a=12345678
echo $a | wc -L

输出结果为:8

  • 3.expr length $变量名
#!/bin/bash

a=12345678
expr length $a

输出结果为:8

  • 4.echo $变量名 | awk ‘{print length($0)}’
#!/bin/bash

a=12345678
echo $a | awk '{print length($0)}'

输出结果为:8

变量字符串的截取:

  • echo ${变量名:3} 截取字符串的前三个丢弃
#!/bin/bash

a=12345678
echo ${a:3}

结果为:45678

  • echo ${变量名:3:2} 截取字符串的前三个丢弃,后面只要两个字符串,其余都不要了
#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a:3:2}

结果为:BB


  • echo ${变量名#A*C} 截取字符串的第一个A到第一个C(包含C)并丢弃;从头开始,最少匹配删除
#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a#A*C}

结果为:CC123aaabbbccc

  • echo ${变量名##A*C} 截取字符串的第一个A到最后一个C(包含C)并丢弃;从头开始,最多匹配删除
#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a##A*C}

结果为:123aaabbbccc


  • echo ${变量名%b*c} 截取字符串的最后一个b到最后一个c(包含c)并丢弃;从结尾开始,最少匹配删除
#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a%b*c}

结果为:AAABBBCCC123aaabb

  • echo ${变量名%%C*c} 截取字符串的最第一个C到最后一个c(包含c)并丢弃;从结尾开始,最多匹配删除
#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a%%C*c}

结果为:AAABBB

变量字符串的替换:

  • echo ${变量名/A/a} 将变量内容匹配的第一个字符替换

echo ${变量/old/new}

#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a/C/c}

结果为:AAABBBcCC123aaabbbccc

  • ehco ${变量名//A/a] 将变量内容匹配的所有字符替换

echo ${变量//old/new}

#!/bin/bash

a=AAABBBCCC123aaabbbccc
echo ${a//C/c}

结果为:AAABBBccc123aaabbbccc

cut字符串切割

  • -d 自定义分隔符
  • -f 与-d一起使用,指定显示那个区域
echo "192.168.2.10"|cut -d "." -f 1		#结果为192
echo "192.168.2.10"|cut -d "." -f 2		#结果为168
echo "192.168.2.10"|cut -d "." -f 3		#结果为2
echo "192.168.2.10"|cut -d "." -f 4		#结果为10

shell脚本数组

定义数组:

array=(值1 值2 值3)

实例:

#!/bin/bash

array=(xiaoming xiaohong xiaolan)

数组的增删改查:

查:

  • echo ${array[*]}或者echo ${array[@]} 打印数组中所有的值
#!/bin/bash

array=(xiaoming xiaohong xiaolan)
echo ${array[*]}
echo ${array[@]}

结果为:
xiaoming xiaohong xiaolan
xiaoming xiaohong xiaolan

  • echo ${array[1]} 打印数组中指定的值

注意:数组是从0开始算的;

#!/bin/bash

array=(xiaoming xiaohong xiaolan)
echo ${array[0]}
echo ${array[1]}
echo ${array[2]}

结果为:
xiaoming
xiaohong
xiaolan

  • echo ${#array[*]} 求数组的长度
  • echo ${#array[@]} 求数组的长度
#!/bin/bash

array=(xiaoming xiaohong xiaolan)
echo ${#array[*]}
echo ${#array[@]}

结果为:
3
3

  • echo ${#array[1]} 求数组中的某一个字符串的长度
#!/bin/bash

array=(xiaoming xiaohong xiaolan)
echo ${#array[0]}
echo ${#array[1]}
echo ${#array[2]}

结果为:
8
8
7

增:

array[3]=xiaohuang 给指定的位置加一个值

#!/bin/bash

array=(xiaoming xiaohong xiaolan)
array[3]=xiaohuang
echo ${array[3]}
echo ${array[*]}

结果为:
xiaohuang
xiaoming xiaohong xiaolan xiaohuang

改:

array[3]=xiaocheng 如果脚标对应位置有值,就修改;脚标可以不是数字array[脚标]

#!/bin/bash

array=(xiaoming xiaohong xiaolan)
array[2]=xiaohei
echo ${array[2]}
echo ${array[*]}

结果为:
xiaohei
xiaoming xiaohong xiaohei

删:

unset array 删除指定数组(array数组名称)
unset array[3] 删除指定位置的值

#!/bin/bash

array=(xiaoming xiaohong xiaolan)
#修改第二个姓名
array[2]=xiaohei
#删除第三个姓名
unset array[2]
echo ${array[2]}
echo ${array[*]}

结果为:

xiaoming xiaohong
文章来源地址https://www.toymoban.com/news/detail-439275.html

相关文章:

文章名 文章地址
【Linux】 shell脚本的创建及使用 《入门到实践》详解[⭐建议收藏!!⭐] https://liucy.blog.csdn.net/article/details/130111812
【Linux】Shell脚本之函数的操作+实战详解[⭐建议收藏!!⭐] https://liucy.blog.csdn.net/article/details/130387377
【Linux】Shell脚本之 if判断、case判断、for循环、while循环 + 实战详解[⭐建议收藏!!⭐] https://liucy.blog.csdn.net/article/details/130387523

到了这里,关于【Linux】 shell脚本的创建及使用 《入门到实践》详解( 建议收藏 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux Shell脚本入门

    目录 介绍 编写格式与执行方式 Shell脚本文件编写规范 脚本文件后缀名规范 首行格式规范 注释格式 shell脚本HelloWord入门案例 需求 效果 实现步骤 脚本文件的常用执行三种方式 介绍 3种方式的区别 小结 多命令处理 Shell变量 环境变量 目标 Shell变量的介绍 变量类型 系统环境变

    2024年01月19日
    浏览(54)
  • Linux 系统shell脚本编程笔记——脚本入门

    目录 1、创建shell脚本文件  2、显示消息 3、 环境变量 4、用户变量 5、命令替换 ​编辑  6、重定向输入与输出 6.1、输出重定向  6.2、输入重定向 ​编辑 7、执行数学运算 7.1、expr命令 7.2、bc的基本用法  8、退出脚本 完整笔记请前往此处获取:https://download.csdn.net/download/qq

    2024年02月06日
    浏览(66)
  • 创建并使用shell脚本

    创建前,我们需要先知道 bash 解释器所在的位置,以方便在头部写声明。一般位置是在 /bin/bash 但是有的是在 /usr/bin/bash ,所以需要查找一下。 文件位置查找命令:whereis xxx 上面指令查询到的位置是:   /usr/bin/bash 命令:touch xxx.sh 新建一个叫 xxx.sh 的文件 因为新系统没有安

    2024年02月03日
    浏览(35)
  • Linux[Shell脚本]入门详细教程

    目录 前言  一、什么是shell 二、什么是脚本?  三、为什么要学习和使用shell? 四、 常见的shell种类  bash  五、shell语法  1.变量  1.1变量的定义与使用  1.2 只读变量 readonly   1.3接收用户输入 read  -p  1.4删除变量uset  2.条件判断语句 两个条件:  多个条件:  3.运算符  

    2024年02月04日
    浏览(53)
  • linux shell脚本详解

    算符 描述 示例 文件比较运算符 -e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ] -f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ] -L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ] -r filename 如果 filena

    2024年02月05日
    浏览(50)
  • Linux:Shell脚本和Shell变量的入门指南

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z05Ey0Tt-1687331750572)(https://example.com/linux-shell-image.png)] Shell脚本是一种用于自动化任务和批处理的脚本语言,主要用于Unix和Linux系统。它提供了一种简单而强大的方式来执行系统命令、处理文件、控制流

    2024年02月10日
    浏览(48)
  • 【Linux】Centos7 的 Systemctl 与 创建系统服务 (shell脚本)

    systemctl 命令 systemctl 状态 systemctl 运行级别 自建服务 1、服务存放路径 2、编写一个系统服务 Unit: Service: 举例 :wq退出 syscmd.sh脚本内容 方式一: 命令: java -jar xxxx.jar 方式二: 命令:java -jar xxxx.jar 方式三: 命令:nohup java -jar xxxx.jar 方式四: 命令:nohup java -jar xxxx.jar /

    2024年02月14日
    浏览(52)
  • Linux Bash Shell 脚本入门(2)——GNU

    ​ 目录 Linux Bash Shell 脚本入门(2)——GNU GNU与Linux GNU GNU的组成 Shell GNOME桌面环境 X Window 软件 GNOME 可点击内容,大部分来自维基百科,可以点击了解详情。 GNU操作系统起源于GNU计划,由理查德·斯托曼在麻省理工学院人工智能实验室发起,希望发展出一套完整的开放源代码

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

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

    2024年02月14日
    浏览(59)
  • 18 个一线工作的常用 Shell 脚本,建议收藏!

    来源:进击云原生 杀死所有脚本 用户猜数字 假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。 应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。 方

    2024年02月10日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包