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. IO流入门-第六章-FileReader_FileWriter复制

    利用FileReader和FileWriter进行复制粘贴 /* 文件复制粘贴 只能复制纯文本文件 2017/4/13 */ import java.io.*; public class FileRe ...

  2. Java 语言基础之数组(一)

    数组定义及格式: 数组: 同一种类型数据的集合, 就是一个容器 定义数组格式1: 元素类型[] 数组名 = new 元素类型[元素个数(即数组长度)]; 说明: 数组是一个容器.而容器属于一个实体,实 ...

  3. 009-JDK可视化监控工具-JConsole

    Console工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定.双击其中一个jvm进程即可开始监控,也可使用“远程进程”来连接远程服务器. ...

  4. js颜色选择器 制作分析

    给html元素设置事件监听, 触发事件 弹出颜色选择器 颜色选择器绘制 获取上次选择的颜色(当前颜色) 绘制渐变色板(canvas) (方法: 横轴渐变ff0000, ffff00, 00ff00, ...

  5. tomcat web工程 jar包冲突解决方法

    目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...

  6. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) B - Code obfuscation

    地址:http://codeforces.com/contest/765/problem/B 题目: B. Code obfuscation time limit per test 2 seconds ...

  7. hadoop12---java并发编程的一些总结

    java并发编程的一些总结 %.1.不应用线程池的缺点 有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(...).start(),对于一般场景是没问题的,但如果是在并发请求很高 ...

  8. Linux性能测试分析命令_sar+iostat+vmstat+top

    sar主要用于收集并统计系统资源的信息,包括CPU.IO.内存.网卡流量等. vmstat命令主要是对操作系统的虚拟内存.进程.IO读写.CPU活动等整体情况进行统计.但是它不能对某个进程进行深入分析 ...

  9. jdbc封装代码

    jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  10. Cocos2d-x项目移植到WP8系列之九:使用自定义shader

    本文原链接:http://www.cnblogs.com/zouzf/p/3995132.html 有时候想得到一些例如灰度图等特殊的渲染效果,就得用到自定义shader,关于shader的一些背景知 ...