Shell 是用C语言编写的程序,便于用户与Linux内核系统进行交互。

Linux的Shell种类众多,常见的有:

  • Bourne Again Shell (/bin/bash)
  • Bourne Shell(/bin/sh或/usr/bin/sh)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)

Bourne Again Shell (Bash) 由于易用和免费,在日常中被广泛使用。同时也是大多数Linux系统默认的Shell。

第一个 Shell脚本

使用文本编辑器vi/vim ,新建一个文件 kimbo_test.sh, 扩展名.sh 代表Shell。

ps: 扩展名并不影响脚本执行,用于标识(见名知意)

#!/bin/bash

echo "Hello World!"

"#!" 是一个约定标记,告诉系统需要什么解释器执行,即使用哪一种Shell

  • 加执行权限 chmod +x vi kimbo_test.sh
  • 执行: sh kimbo_test.sh
  • 返回结果:Hello World!

Shell 只有单行注释,使用符号 "#"


Shell 变量

1.定义:必须使用字母、下划线

2.使用: 用美元符号 "$" ,加上变量名

#!/bin/bash

## 定义变量
my_name="kimbo"
## 打印变量
echo ${my_name}

说明:大括号用来表明变量的边界,也可以 直接使用 $my_name 。为了可读性、防止歧义,建议使用大括号

Shell 字符串

单引号:属于强引用,任何字符都会原样输出

双引号:属于弱引用,可以解析变量、转义字符 (尽可能使用双引号)

  1. 拼接字符串
#!/bin/bash

## 定义变量
my_name="kimbo"
my_work="data analysis" ## 拼接变量
my_result="my name is ${my_name},my work is ${my_work}."
## 打印变量
echo ${my_result}

  2.获取字符串长度

#!/bin/bash

## 定义变量
my_name="kimbo"
## 打印变量,取字符串长度
echo ${#my_name}

  3.截取部分字符

语法:${str:start:len},start表示从哪里开始截取,len表示 总共截取多少位。

  • 左边第一个字符用 0 表示,右边第一个字符用 0-1 表示
#!/bin/bash

## 定义变量
my_name="kimbo"
## 打印变量,从左边第2个字符开始,截取3位
echo ${my_name::}

  4. 其他截取方式

语法:

${var#*str} 最小限度从左边截取str
${var##*str} 最大限度从左边截取str
${var%str*} 最小限度从右边截取str
${var%%str*} 最大限度从右边截取str

#!/bin/bash

##定义变量
my_website="https://www.cnblogs.com//kimbo"
## 打印变量
echo "var is: ${my_website}"
## 从左边开始查找,截取右边的字符(保留后面)
## 最小限度
echo "1: ${my_website#*//}"
## 最大限度
echo "2: ${my_website##*//}"
## 从右边开始查找,截取左边的字符(保留前面)
## 最小限度
echo "3: ${my_website%//*}"
## 最大限度
echo "4: ${my_website%%//*}"

运行结果:

  5. 字符替换

    i) 首次替换:${var/source_str/dest_str}

    ii)全部替换:${var//source_str/dest_str}

#!/bin/bash

test_str="this is kimbo,he is a humor guy. by kimbo zhang."
echo "单替换:${test_str/kimbo/kobe}"
echo "全部替换:${test_str//kimbo/kobe}"

运行结果:

Shell 概述、截取字符操作等的更多相关文章

  1. Linux - Shell - 字符串截取

    概述 简述 字符串 截取 背景 之前因为要给文件 批量重命名, 做过字符串截取 当时做好了, 也说了要写点东西 结果忘了 现在又要尝试批量 重命名 才发现之前的东西已经忘了好多 要是当时把博客写下来, ...

  2. 【转】shell字符串截取

    shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...

  3. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  4. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

  5. Shell字符串截取

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  6. shell中截取字符串的方法总结

    shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  7. 批处理中set截取字符具体解释

    set截取字符具体解释  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们经常使用的命令之中的一个. 在字符串截取方面,新手 ...

  8. oracle 中对查询出来的数据进行切割、截取等操作

    oracle 中对查询出来的数据进行切割.截取等操作 最近遇到一个问题,需要把一个带有,的字符串拆分成多行.通过查询资料,这个操作需要使用以下2个关键知识: 1. REGEXP_SUBSTR函数 这个 ...

  9. Shell脚本 | 截取包名

    之前写 shell 脚本的几篇文章都是先大致介绍脚本的功能和写法,然后一股脑的给出完整的代码.并没有细致入微的解释脚本中的每一行是如何思考如何编写的. 今天反其道而行之,只介绍一行代码.争取能讲的清楚 ...

随机推荐

  1. flask大全

    django:重武器,内部包含了非常多组件:ORM.Form.ModelForm.缓存.Session,中间件,信号等... flask:短小精悍.内部没有太多组件,第三方组件非常丰富 1.初识fla ...

  2. windows 系统如何安装 mysql 8.0.15 数据库?

    windows 系统如何安装 mysql 8.0.15 数据库? 1. 下载安装包 下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0. ...

  3. 搜索过滤grep(win下为findstr)

    搜索过滤grep(win下为findstr) 1.主要参数 [options]主要参数: -c:只输出匹配行的计数. -i:不区分大小写 -h:查询多文件时不显示文件名. -l:查询多文件时只输出包含 ...

  4. centos上源码安装clang 3.8

    之前想在centos系统上安装clang 3.6版本,由于yum上版本太低,想通过源码编译安装.按照网上说的源码安装步骤,下好llvm.clang.clang-tools-extra和compiler ...

  5. s5_day8作业

    # 1 整理今天装饰器代码(每人手写一份,注意,是手写,交到小组长手里,明天我检查),准备明天默写 # 2 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 ...

  6. sql server数据库字段名要注意不能叫file

    sql server数据库字段名要注意不能叫file 如java 中  private string  file,这是sql 的关键字

  7. java实现简单邮件的发送以及常见问题

    java实现简单邮件的发送以及常见问题 最近遇到个需求需要实现发送邮件的功能,以前做发送邮件功能都是有邮箱用户名密码,通过用户名密码连接对应的SMTP服务器来实现邮件的发送.但是这次用公司内部的邮箱, ...

  8. hadoop17---RPC和Socket的区别

    RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台 ...

  9. ASP.NET MVC 处理404与500错误页面的方法

    第一步创建ErrorPageController 第二步添加Oops页面 @{ ViewBag.Title = "Oops"; Layout = "~/Areas/Adm ...

  10. 平衡搜索树--红黑树 RBTree

    红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black. 通过对任何一条从根到叶子节点简单路径上的颜色来约束树的高度,红黑树保证最长路径不超过最短路径的两倍, ...