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. Java 运行环境介绍

    Java 语言特点: 跨平台性: 一次编译,到处运行.即不受操作系统限制,编译一次,可以在多个平台运行.而这个优势得益于 JVM(Java Virtual Machine, 即Java 虚拟机). 两 ...

  2. Python和数据科学的起步指南

    http://python.jobbole.com/80853/ Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在 ...

  3. python 多进程使用Queue通信的例子

    import time from multiprocessing import Process,Queue MSG_QUEUE = Queue(5) def startA(msgQueue): whi ...

  4. Java并发(2):Lock

    在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方 ...

  5. Java分布式:JWT(JSON Web Tokens)

    Java分布式:JWT(JSON Web Tokens) 0.优势 Session方式存储用户状态占用大量服务器内存.一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存 ...

  6. HDU - 4407 Sum (容斥)

    题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和: 2.将x位置的数变为c. 分析:很容易把人骗到线段树的思维中,而实际上操作2单点的 ...

  7. hadoop nn 运维一例

    nn1 崩溃之后,nn2变为active,但是nn1日志中有异常,处于standby状态的,无法响应读的操作 最后查出原因是因为fensing的问题.

  8. Linux网络相关命令firewalld和netfilter、iptables 使用(6/22)

    iptables和netfilter的关系: netfilter在内核空间的代码根据table中的rules,完成对packet的分析和处置.但是这些table中的具体的防火墙rules,还是必须由系 ...

  9. nohup- Shell后台运行

    &方式: Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台:          /usr/local/my ...

  10. linux:查看磁盘硬件信息hdparm,smartctl

    smartctl 命令 这个一个用于控制和监控支持smart技术的硬盘的命令.通常配合 -a 选项我们可以查看到比较详尽的硬盘信息(比如序列号.硬盘容量.已运行时间.硬盘健康状况等).用法如下: sm ...