shell脚本编写辅助命令

news2024/10/7 17:30:32

目录

一、echo 命令

二、字符串相关操作

1.截取字符串

2.获取字符串长度

3.字符串追加字符

4.从开头或结尾删除字符串指定格式内容

三、随机数

1.使用 $RANDOM

2.指定RANDOM变量的范围

(1)从0开始的范围

(2)从指定数始的范围

四、从文件获取循环语句的取值

1.for 循环从文件取值

2. while 循环从文件取值

五、IFS变量指定字段分隔符

1.查看IFS变量指定的字段分隔符

2.永久修改字段分隔符

3.临时修改字段分隔符


一、echo 命令

echo [选项] ... 将指定内容(字符、变量、命令等)标准输出到屏幕

-n 不换行输出(默认是换行输出)

-e 输出转义字符,将转义后的内容输出

-e 支持输出内容常用转义字符

转义字符作用
\b转义后相当于退格键(删除前一个字符,可使用多次)
\c不换行输出,在“\c”后面不存在字符的情况下,相当于echo -n 在“\c”后面存在字符的情况下,后面的字符不会被输出
\n换行,被输出的字符从“\n”处开始另起一行输出
\f换行,“\f”后换行输出的字符,开头从上一行结尾开始
\v与“\f”相同
\t转义后相当于插入tab制表符
\r光标移至行首(不换行)将\r后的字符从头输出,覆盖原有长度的内容
\输出特殊字符本身,如\ 输出\ 本身,$ 输出 $本身
[root@localhost1 ~]#echo "abcd" && echo "abcd"
abcd
abcd
[root@localhost1 ~]#echo -n "abcd" && echo "abcd"
abcdabcd
​
[root@localhost1 ~]#echo -e "abcd\befg"
abcefg
​
[root@localhost1 ~]#echo -e "abcd\cefg"
abcd
​
[root@localhost1 ~]#echo -e "abcd\nefg"
abcd
efg
​
[root@localhost1 ~]#echo -e "abcd\fefg"
abcd
    efg
​
[root@localhost1 ~]#echo -e "abcd\vefg"
abcd
    efg
​
[root@localhost1 ~]#echo -e "abcd\tefg"
abcd    efg
​
[root@localhost1 ~]#echo -e "abcd\refg"
efgd
​
[root@localhost1 ~]#echo -e "\\ \$"
\ $

二、字符串相关操作

1.截取字符串

${变量名:索引:长度}

注:索引是指一个字符串中,字符排序的编号,索引编号以0开头(第一个字符编号为0)

//定义变量string
[root@localhost1 ~]#string=nicetomeetyou
​
//截取
[root@localhost1 ~]#echo ${string:6:4}
meet
[root@localhost1 ~]#echo ${string:0:4}
nice

2.获取字符串长度

${#变量名}

[root@localhost1 ~]#string=nicetomeetyou
​
[root@localhost1 ~]#echo ${#string}
13

3.字符串追加字符

变量+=字符串或变量 //将原有的变量值后追加指定的字符串或变量值

​
[root@localhost1 data]#vim string.sh
#!/bin/bash
​
string1=abcdefg
string1+=hijk    -- 追加字符串
echo $string1
​
string2="nice to meet "
yourname=jack
string2+=$yourname  -- 追加变量的值
echo $string2  
​
[root@localhost1 data]#bash string.sh
abcdefghijk
nice to meet jack


​

4.从开头或结尾删除字符串指定格式内容

echo ${变量名%指定格式内容}

echo ${变量名%%指定格式内容}

echo ${变量名#指定格式内容}

echo ${变量名##指定格式内容}

%末尾往前匹配最短符合指定格式的内容并删除
%%末尾往前匹配最长符合指定格式的内容并删除
#开头往后匹配最短符合指定格式的内容并删除
##开头往后匹配最长符合指定格式的内容并删除
指定格式内容字符串中符合某个内容特征的格式(如:*是以:开头后面有若干字符)

最短符合可理解为只有一段满足指定格式的内容;最长符合可理解为所有满足指定格式的内容。

​
//定义一个变量i
[root@localhost1 ~]#i="11,22,33,44"
[root@localhost1 ~]#echo $i
11,22,33,44
​
//对$i中从结尾开始最短满足,*格式的内容进行删除
[root@localhost1 ~]#echo ${i%,*}
11,22,33
​
//对$i中从结尾开始最长满足,*格式的内容进行删除
[root@localhost1 ~]#echo ${i%%,*}
11
​
//对$i中从开头开始最短满足*,格式的内容进行删除
[root@localhost1 ~]#echo ${i#*,}
22,33,44
​
//对$i中从开头开始最长满足*,格式的内容进行删除
[root@localhost1 ~]#echo ${i##*,}
44
​
//对$i中从结尾开始最短满足*,*,格式的内容进行删除
[root@localhost1 ~]#echo ${i#*,*,}
33,44


​

三、随机数

1.使用 $RANDOM

$ RANDOM //RANDOM变量可以生成随机数(默认范围 0 ~ 32767)

[root@localhost1 ~]#echo $RANDOM
6584
[root@localhost1 ~]#echo $RANDOM
14161

2.指定RANDOM变量的范围

(1)从0开始的范围

$[ RANDOM % n ] //n代表指定数字,使用取余操作可实现指定随机数范围( 0 ~ n-1)

//取 0~9 的随机数
[root@localhost1 ~]#echo $[RANDOM % 10]
0
[root@localhost1 ~]#echo $[RANDOM % 10]
4
[root@localhost1 ~]#echo $[RANDOM % 10]
6
[root@localhost1 ~]#echo $[RANDOM % 10]
8

(2)从指定数始的范围

$[ RANDOM % n + x ] //x为指定数字,n 后加上 x ,代表的随机数范围是( x ~ n-1+x)

//取 1~100 范围的随机数
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
38
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
49
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
76
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
12

四、从文件获取循环语句的取值

首先创建文件用于下面的脚本取值,这里每个取值使用换行符分割,实际上每个取值默认可以通过空格、制表符、换行符

//创建文件用于脚本取值
[root@localhost1 ifstest]#vim value.txt
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba

1.for 循环从文件取值

for 变量名 in $(cat 文件位置)

do

命令序列

done

//for 循环从文件取值
[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
for i in $(cat /ifstest/value.txt)
do
  echo $i
done
​
[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba

2. while 循环从文件取值

while read 变量名

do

命令序列

done < file

[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
while read i
do
  echo $i
done < /ifstest/value.txt
​
[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba

cat 文件位置 | while read 变量名

do

命令序列

done

 

[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
cat /ifstest/value.txt | while read i
do
  echo $i
done

[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba

五、IFS变量指定字段分隔符

1.查看IFS变量指定的字段分隔符

[root@localhost ~]# set | grep IFS //使用此命令可以查看IFS指定的字段分隔符

-- IFS变量指定的字段分隔符默认为 (空格)、\t(tab制表符)、\n(enter换行符)

[root@localhost1 ~]#set | grep IFS
IFS=$' \t\n'        
    local i IFS='
    local i IFS=" "'
    local i IFS=" "'
    local i IFS='
    local i IFS='
            local c i=0 IFS='
    local IFS='
    local IFS='
    local option option2 i IFS='
    IFS='
        local IFS='
        local IFS='
        local IFS='
        local IFS='
    local IFS='
        local IFS='
    local i IFS='
    local IFS='
            local i c='' IFS='
        local OIFS=$IFS IFS='
        IFS=$OIFS;
                local IFS='
                    local IFS='
                    local IFS='
    local IFS='

2.永久修改字段分隔符

​
//直接修改IFS变量的值,可以实现永久修改字段分隔符
[root@localhost1 ~]#IFS=$'/n'
[root@localhost1 ~]#set | grep IFS
IFS=/n  -- 这里显示已经被修改成/n(换行符)
    local i IFS='
    local i IFS=" "'
    local i IFS=" "'
    local i IFS='
...


​

3.临时修改字段分隔符

//指定文件用于循环语句取值
[root@localhost2 ~]#vim value.txt
zhang san
li si
wang wu
zhao liu
qian qi
zhu ba
​
//默认情况的$IFS会指定空格、制表符、换行符为字段分割符
[root@localhost2 ~]#vim CatchFileValue.sh
#!/bin/bash
for i in `cat /root/value.txt`
do
  echo $i
done
​
//文件中的值输出效果如下
[root@localhost2 ~]#bash CatchFileValue.sh
zhang san
li si
wang wu
zhao liu
qian qi
zhu ba
zhang
san
li
si
wang
wu
zhao
liu
qian
qi
zhu
ba

在一个脚本中,如果某段命令行程序需要使用特定的字段分隔符,可使用如下操作

IFSb=$IFS -- 自定义一个变量,将$IFS的变量值赋给此变量

IFS='\n' -- 修改$IFS指定的字段分隔符

命令序列 -- 修改后的命令序列将会使用修改后的$IFS指定的字段分隔符

IFS=$IFSb -- 将自定义的变量再赋值给$IFS,即恢复原本的$IFS

命令序列 -- 之后的命令将不会受到之前修改的$IFS的影响

[root@localhost2 ~]#vim CatchFileValue.sh
#!/bin/bash
IFSb=$IFS
IFS=$'\n'    -- 将字段分割符改为\n(换行符)
for i in `cat /root/value.txt`
do
  echo $i
done
echo "------------"
IFS=$IFSb    -- 将原本的$IFS变量值恢复
for j in `cat /root/value.txt`
do
  echo $j
done
​
​
[root@localhost2 ~]#bash CatchFileValue.sh
zhang san    -- 实现只取换行符分割的字段
li si
wang wu
zhao liu
qian qi
zhu ba
------------
zhang    --恢复后不受之前修改的影响,与原本输出效果相同
san
li
si
wang
wu
zhao
liu
qian
qi
zhu
ba

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

35、git的使用

一、git简介 git是一款免费、开源的版本控制系统&#xff0c;用于高效地处理任何或大或小的项目。 作用&#xff1a; 文件存档备份 文件版本管理 多人协同合作&#xff08;自动合并&#xff09; 二、git的三个区域 工作区&#xff1a;处理工作的区域 暂存区&#xff1a;临时存放…

Shell脚本实现数组冒泡排序等简单算法排序

目录 一、冒泡排序 1.简介 2.基本思想 3.算法思路 4.shell脚本实现 二、选择排序 1.简介 2.基本思想 3.shell脚本实现 三、插入排序 1.算法思路 2.shell脚本实现 四、反转排序 1.作用 2.shell脚本实现 一、冒泡排序 1.简介 类似气泡上涌的动作&#xff0c;会将…

Java入门之学习随记(三)

一. 栈内存和堆内存 堆内存:存放"引用数据类型的数据"和"new出来的对象",注意-创建出来的对象只包含各自的成员变量,不包括成员方法. 栈内存:存放"基本数据类型的数据","引用数据类型的变量名"以及"对象的引用",但是引用数…

k8s之ReplicaSet回收pod的优先级

ReplicaSet syncReplicaSet的逻辑&#xff0c;首先找到rs下相关的pod // 从informer中获取当前ns下所有的podallPods, err : rsc.podLister.Pods(rs.Namespace).List(labels.Everything())if err ! nil {return err}// 忽略不健康的podfilteredPods : controller.FilterActiveP…

CentOS桥接模式下设置静态IP并解决java.net.ConnectException: Connection timed out: connect

一、前言 最近在配置服务器&#xff0c;DHCP模式下IP地址不固定&#xff0c;每次SSH远程登录连接不上&#xff0c;都要查看新动态分配的IP地址重新配置&#xff0c;感觉些许麻烦&#xff0c;于是给机器配置了静态固定IP。 动态主机配置协议DHCP&#xff08;Dynamic Host Confi…

Shell脚本练习题(附详细解题过程)

目录 一、利用for循环打印99乘法表 二、十进制转二进制 三、将十进制ip地址转换为二进制格式 四、检测某个网段中存活的主机并输出其ip地址 五、检查文件中用户名是否存在并提示创建用户和设置密码 六、检查httpd服务并开启 七、根据百米赛跑成绩判断结果 八、随机数…

栈和队列(数据结构刷题)[一]-python

文章目录 前言一、原理介绍二、用栈实现队列1.操作2.思路 三、关于面试考察栈里面的元素在内存中是连续分布的么&#xff1f; 前言 提到栈和队列&#xff0c;大家可能对它们的了解只停留在表面&#xff0c;再深入一点&#xff0c;好像知道又好像不知道的感觉。本文我将从底层实…

Django----------模板、静态文件、案例(城市天气预报)、请求和响应

目录 1.templates模板 2.静态文件 1.static目录 2.引用静态文件 1.方式一&#xff1a;直接引用 2.方式二&#xff1a;头部及内部引用 3. 模板语法 1.取内容 2.取下标 3.for循环 4.利用字典 5.列表里套字典 6.if条件语句 7.总结 4.案例&#xff08;城市天气预…

CH573-01-GPIO-LED——RISC-V内核BLE MCU快速开发教程

1. 新建工程 1) NEW Project 点击“File->New->MounRiver Project”&#xff1a; 2) finish 选择CH573F的裸机开发工程模板&#xff0c;如下图&#xff0c;然后点击“finish” 3) 编译检查 4) 精简代码 打开工程目录下的./src/main.c文件&#xff0c;修改删掉生成的串口测…

动态规划III (买股票-121、122、123、188)

CP121 买股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利…

Vue 中的几种动画效果

Vue 中的动画效果 在 Vue 中&#xff0c;动画效果是非常常见的交互方式。它可以为用户提供更加生动的交互体验&#xff0c;增强用户的参与感和满意度。在本文中&#xff0c;我们将探讨 Vue 中的动画效果的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理解。…

『手撕 Mybatis 源码』06 - Mapper 代理方式初始化

Mapper 代理方式初始化 首先修改一下 SqlSession 获取代理对象方式&#xff0c;即通过 getMapper() 来拿到动态代理对象 public class MybatisTest {/*** 问题1&#xff1a;<package name"com.itheima.mapper"/> 是如何进行解析的&#xff1f;* 解答&#xf…

算法刷题-数组-有序数组的平方

977.有序数组的平方 力扣题目链接 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#…

clang到底是什么?gcc和clang到底有什么区别?

最近发现自己对 GNU GCC 和 Clang 的区别不太清楚&#xff0c;影响到一些实现和学习&#xff0c;所以趁这两天有空好好研究了一下。 在这个研究过程中&#xff0c;我发现很多问题其实源自于语言&#xff08;不是指编程语言&#xff0c;而是中文和英文翻译的失真&#xff09;和…

前端前端学习不断

卷吧卷吧...&#xff0c;这东西什么时候是个头啊……

智能指针(2)

智能指针&#xff08;2&#xff09; shared_ptr(共享型智能指针)基础知识特点引用计数器共享型智能指针结构理解 shared_ptr仿写删除器类计数器类shared_ptr类使用以及仿写代码的理解 循环引用_Weaks 初始化智能指针的方法 shared_ptr(共享型智能指针) 基础知识 在java中有一…

chatgpt赋能python:Python如何判断输入的字符——基础教程与实例

Python如何判断输入的字符——基础教程与实例 时至今日&#xff0c;互联网已经成为人们获取信息的重要途径&#xff0c;而搜索引擎优化&#xff08;SEO&#xff09;则是网站重要的推广手段之一。而Python作为一种高级编程语言&#xff0c;在实现SEO时也有很大的优势&#xff0…

chatgpt赋能python:Python如何进行升序和降序排列

Python如何进行升序和降序排列 Python是一种非常流行的编程语言&#xff0c;由于其在数据科学、机器学习和人工智能等领域的强大表现&#xff0c;越来越多的人开始学习和使用Python。在Python中&#xff0c;排序是一项非常常见的操作。在这篇文章中&#xff0c;我将向您介绍如…

stable diffusion webui 登录接口(login)api接口调用(使用C#)

唠嗑 本次将跟读者讲一下如何通过C#请求sd webui api【login】接口&#xff0c;如果读者觉得文章有用&#xff0c;请给【点个赞】吧&#xff0c;有问题可以评论区提问。 实战 1.配置api启用参数 启动webui时&#xff0c;需加上【–api】 、【–api-auth 账号:密码】 和【–…

chatgpt赋能python:Python字符类型判断:如何判断字符是字母或数字

Python字符类型判断&#xff1a;如何判断字符是字母或数字 在Python编程中&#xff0c;经常需要判断一个字符是字母还是数字。本文将介绍如何在Python中判断字符类型&#xff0c;并给出几个示例。 判断字符类型的方法 在Python中&#xff0c;可以使用以下方法来判断字符类型…