一、变量

1.shell变量名

(1)可以由字母、数字、下划线等字符组成。但是第一个字符必须是字母或者下划线。

(2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.tar.gz 和 {$project_svn}_$date.tar.gz。第一个shell理解为$project是一个变量。

2.变量的赋值:

variable=value

note:赋值运算符前后不能有空格,否则会报错。

3.变量分类:

内部变量是为了shell编程的而设定的变量。

本地变量是在代码块或函数中定义的变量,切尽在定义的范围内有效

参数变量是调用shell脚本或执函数传递的时的变量

环境变量是为了系统内核、系统命令和用户命令提供运行环境而设定的变量

用户自定义变量即普通变量或者临时变量

3.1内部变量

PWD:表示当前的工作目录,其变量值等于PWD内部命令的输出。

[centos@s201 ~]$ echo $PWD
/home/centos

RANDOM: 每次引用这个变量,将会生成一个均匀分布0-32676 范围内的随机整数

SCONDS:脚本已经运行的时间

PPID:当前进程的父进程的进程ID

$?:表示最近一次执行的命令或者shell脚本的出口状态

3.2环境变量:

EDITOR:

HOME:用户主目录

PATH:指定命令的检索路径

如何将/usr/local/mysql/bin添加到系统默认读取的PATH的变量中?

PATH=$PATH:/usr/local/mysql/bin

note:linux包含两个重要文件 /etc/profile $HOME/.bash_profile 每次系统登入都要读取这两个文件。

5.变量的引用和替换

假设variable是一个变量

$variable 或者 ${variable } 表示使用变量中储存的值用于替换变量本身

note:位于但用双引号中的变量可以替换,位于单引号中变量则不能进行替换。

二、函数

function 函数名()

{

action;

[returm 数值;]

}

具体说明:

1自定义函数既可以用带function 参数的函数名(),也可以直接用函数名()直接定义,而不带任何参数

2参数返回的时候可以显示的加return返回,如果不加,则将一最后一条命令的运行结果作为返回值。return 后跟数值,取值范围0-255

demo遍历某个目录所有文件

#!/bin/bash
function traverse(){
for file in `ls $`
do
if [ -d $"/"$file ]
then
traverse $"/"$file
else
echo $"/"$file
fi
done } traverse "/home"

三、shell中的数组

(1)定义数组

arr1=(value1...value2)

arr1=(

value1

value2

value3

)

或者单独定义数组的各个分量

arr1[0]=value0

arr1[1]=value1

(3)读取数组

读取数组值的一般格式:

${arr1[index]}

使用@ *可以获取数组中的所有元素:

${arr[*]}

${arr[@]}

获取数组的长度

${#arr[*]}

${#arr[@]}

也可以获取数组中单个元素的长度

${#arr[index]}

[centos@s201 ~]$ arr1=(        )
[centos@s201 ~]$ echo ${arr1[]} [centos@s201 ~]$ echo ${arr1[*]} [centos@s201 ~]$ echo ${arr1[@]} [centos@s201 ~]$ echo ${#arr1[@]} [centos@s201 ~]$ echo ${#arr1[*]} [centos@s201 ~]$ echo ${#arr1[]}

四、shell中字符串的截取

第一种方法:

从左向右截取最后一个string后的字符串

${variable##*string}

从左向右截取第一个string后字符串

${variable##*string}

从右向左截取最后一个string前的字符串

${variable%%string*}

从右向左截取第一个string前的字符串

${variable%string*}

[centos@s201 ~]$ echo ${a##*"i"}
n
[centos@s201 ~]$ echo ${a##*i}
n
[centos@s201 ~]$ echo ${a#*i}
ngbin
[centos@s201 ~]$ echo ${a%%i}
wangqingbin
[centos@s201 ~]$ echo ${a%%i*}
wangq
[centos@s201 ~]$ echo ${a%i*}
wangqingb

第二种方法:

${变量:n1:n2} 截取变量n1开始的n2 个字符。第一位是0

[centos@s201 ~]$ echo ${a::}
ngqn

第三种方法:

ls -al | cut -d "." -f2

 ls -al
total
drwx------. centos centos Apr : .
drwxr-xr-x. root root Jul ..
-rw-rw-r--. centos centos Jan :
-rw-rw-r--. centos centos Jan : ]
-rw-rw-r--. centos centos Jan : ]
-rw-rw-r--. centos centos Jan : ]]
-rwxrwxr-x. centos centos Jan : .sh
-rw-rw-r--. centos centos Oct : .txt
-rw-rw-r--. centos centos Jul --.log
[centos@s201 ~]$ ls -al |cut -d "." -f2
total
centos centos Apr :
root root Jul
centos centos Jan :
centos centos Jan : ]
centos centos Jan : ]
centos centos Jan : ]]
centos centos Jan :
centos centos Oct :
centos centos Jul --
[centos@s201 ~]$ ls -al |cut -d "." -f1
total
drwx------
drwxr-xr-x
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rwxrwxr-x
-rw-rw-r--
-rw-rw-r--

shell变量、函数和数组以及字符串的截取的更多相关文章

  1. 关于shell脚本函数、数组、字符串截取、svn更新发布实例

    #/bin/bash #功能:QA服根据模板创建区配置文件并提交到svn上. SOURCE_PATH=/data/source_code SVN_PATH=/code/psm   #svn发布目录,要 ...

  2. shell脚本函数与数组

    前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...

  3. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  4. shell变量定义与数组-1

    1.查看系统所有shell和默认shell 查看系统所有的shell: cat /etc/shells 查看系统默认shell: echo $SHELL 2.第一个shell脚本,打印字符串Hello ...

  5. shell脚本函数及数组

    函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...

  6. 复习C++_基础、函数、数组、字符串

    程序的开发过程 程序 源程序:用源语言写的,有待翻译的程序: 目标程序:源程序通过翻译程序加工以后生成的机器语言程序: 可执行程序:连接目标程序以及库中的某些文件,生成的一个可执行文件,例如Windo ...

  7. JS 从一个字符串中截取两个字符串之间的字符串

    /************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...

  8. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  9. shell变量,字符串,数组

    一.shell变量定义: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头: 中间不能有空格,可以使用下划线: 不能使用标点符号: 不能使用bash里的关键字. 变量使用: 使用一个定义过的 ...

随机推荐

  1. KCP - A Fast and Reliable ARQ Protocol

    KCP - A Fast and Reliable ARQ Protocol README in English 简介 KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均 ...

  2. 记一次 Vultr配置

    这里不想排版,因为心情复杂. 第一次搞这个VPS,真的是很气人,由于中英文的关系我一开始就误操作了,让VPS一直挂载着Ubuntu18.10,所以系统一直是在光盘的引导界面,这个问题知道我注册后的四个 ...

  3. jenkins pipline 和 jenkinsfile

    Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中.Jenkins Pipeline 提供了一套可扩展的 ...

  4. PTA(Basic Level)1042.字符统计

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...

  5. 【Python】【demo实验3】【显示素数,显示两个数范围内的所有素数】

    打印两个整数之间的所有素数: (使用平方根来判断  是否应停止验证该数值是否为素数) for i in range(956253526252,9956253526252): k = 1 if i == ...

  6. Hive怎么使用远程连接

    HIVE的连接模式== 本地连接模式 直接启动hive命令 HIVE的远程连接 这里要启动HIVE的服务 thirft进行编写 hiveserver2 —- > 前台启动 后台启动 前台启动 h ...

  7. DFS搜索算法--(1)基础图遍历 绝对看!的!懂!

    内容总结 自<啊哈!算法!> 作为一个都大二的了一个菜鸡,做题的时候DFS怎么可以不会呢!!! 作为一个都大二了的(!!!)菜鸡....<啊哈算法>这本书第四章的搜索,开始那里 ...

  8. JAVA二维码编码&解码

    QRCodeUtil.java package web; import java.awt.AlphaComposite; import java.awt.Color; import java.awt. ...

  9. Linux-2.1vim简单使用

    1.用vim打开文件,文件内容显示在终端,命令模式无法编辑 vim 1.txt vi 1.txt 2.使用a,i,o,shift+o编辑文件,按Esc退出编辑模式 i 插入在光标前 a 插入在光标后 ...

  10. WPF贝塞尔曲线示例

    WPF贝塞尔曲线示例 贝塞尔曲线在之前使用SVG的时候其实就已经有接触到了,但应用未深,了解的不是很多,最近在进行图形操作的时候需要用到贝塞尔曲线,所以又重新来了解WPF中贝塞尔曲线的绘制. 一阶贝塞 ...