一、变量

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 $1`doif [ -d $1"/"$file ]thentraverse $1"/"$fileelseecho  $1"/"$filefidone}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=( 1 2 3 4 5 6 7 )
[centos@s201 ~]$ echo ${arr1[1]}
2
[centos@s201 ~]$ echo ${arr1[*]}
1 2 3 4 5 6 7
[centos@s201 ~]$ echo ${arr1[@]}
1 2 3 4 5 6 7
[centos@s201 ~]$ echo ${#arr1[@]}
7
[centos@s201 ~]$ echo ${#arr1[*]}
7
[centos@s201 ~]$ echo ${#arr1[1]}
1

四、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:2:4}
ngqn

第三种方法:

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

 ls -al
total 1508456
drwx------.  47 centos centos      8192 Apr  5 07:07 .
drwxr-xr-x.   3 root   root          20 Jul 16  2018 ..
-rw-rw-r--.   1 centos centos         0 Jan  9 14:59 1
-rw-rw-r--.   1 centos centos         0 Jan  9 14:35 ]1
-rw-rw-r--.   1 centos centos         0 Jan  9 14:40 1]
-rw-rw-r--.   1 centos centos         0 Jan  9 14:38 1]]
-rwxrwxr-x.   1 centos centos        81 Jan  9 21:55 1.sh
-rw-rw-r--.   1 centos centos       109 Oct 11 11:31 1.txt
-rw-rw-r--.   1 centos centos  52839453 Jul 30  2018 2018-07-01.log

[centos@s201 ~]$ ls -al |cut -d "." -f2
total 150845647 centos centos      8192 Apr  5 07:073 root   root          20 Jul 16  20181 centos centos         0 Jan  9 14:59 11 centos centos         0 Jan  9 14:35 ]11 centos centos         0 Jan  9 14:40 1]1 centos centos         0 Jan  9 14:38 1]]1 centos centos        81 Jan  9 21:55 11 centos centos       109 Oct 11 11:31 11 centos centos  52839453 Jul 30  2018 2018-07-01

[centos@s201 ~]$ ls -al |cut -d "." -f1
total 1508456
drwx------
drwxr-xr-x
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rwxrwxr-x
-rw-rw-r--
-rw-rw-r--

转载于:https://www.cnblogs.com/wqbin/p/10886497.html

shell变量、函数和数组以及字符串的截取相关推荐

  1. PHP学习总结(函数、数组、字符串)

    这次主要学习一下PHP中的函数.数组和字符串. 函数[1]-自定义函数 function 函数名([形式参数1,形式参数2,....形式参数n]){//各种PHP代码....//......retur ...

  2. 函数和数组,字符串逻辑题

    函数和数组逻辑题 函数 预解析 递归求兔子序列 数组 选项卡 全选和反选 点击更换背景颜色 简易日历 30个整型元素的数组,每五个数求出一个平均值,存入新数组 二维数组 找出数组中小于10 的数据 编 ...

  3. 【前端学习】Day-16 JS基础、循环、函数、数组、字符串、字典

    文章目录 1. 了解JavaScript 2. js小案例 3. JavaScript基础 4. js循环 5. js函数 6. js数组 7. js字符串 8. js练习题 1. 了解JavaScr ...

  4. linux shell脚本传数组参数,shell脚本----函数和数组

    目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...

  5. shell脚本函数返回数组

    执行脚本(文件my.sh),输出结果

  6. C语言编程基础-10函数形参数组做形参文件操作

    函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...

  7. php 带建数组转字符串,php数组转换为字符串的两种方法详解【附视频】

    本篇文章主要给大家介绍PHP数组转换为字符串的两种方法.(文章末尾附有对应的视频教程) 第一种方法:使用PHP本身的函数implode来直接将数组转换为字符串. 第二种方法:使用循环遍历数组元素拼接成 ...

  8. php返回第一个字符串的码点_PHP 字符串编码截取函数

    一个效率更高的全半角字符串截取函数 [原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]]现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如 ...

  9. php 把数组转换成字符串_php怎么将数组转换为字符串

    php将数组转换为字符串的方法:可以使用implode()函数分割数组,该函数会返回由数组元素组成的字符串.还可以利用循环遍历数组元素并将其拼接成字符串. php将数组转换为字符串的方法 方法1:利用 ...

最新文章

  1. 英特尔携手中科院计算所建立中国首个 oneAPI 卓越中心
  2. JAVA日期加减运算
  3. MySQL表注释和字段注释
  4. 用shell脚本监控进程是否存在 不存在则启动的实例
  5. 为什么java可跨平台执行,java为什么可以跨平台执行
  6. scrum立会报告+燃尽图(第三周第七次)
  7. 交换机端口安全如何部署
  8. git查看某个文件的修改历史
  9. oracle11g session,Oracle11g中Killsession心得
  10. Android NIO(Noblocking I/O非阻塞I/O)小结
  11. CRF++ Source code reading experience
  12. bootdo图片上传
  13. 使用 TiDB 构建实时应用
  14. 组件中引入echarts饼状图去除他的划过放大效果。
  15. Go select chan操作
  16. 授权公众号第三方平台和开发者模式冲突吗?
  17. A0/A1/A2/A3/A4图纸大小分别是多少
  18. 为什么PCB上的单端阻抗控制50欧姆
  19. stlink-opencd-gdb调试程序
  20. AutoIt 在线中文文档、开发工具 (GUI 图形开发工具)

热门文章

  1. java 上界和下界,Java 泛型上下界(上下限)
  2. github安装_安装ROS时无法初始化(无法连接raw.github)的解决方案
  3. python 给文本加下划线_untiy3dUGUI实现text文本下划线
  4. java 485通讯_CAKJ-963U3-KT带485通讯上下限报警智能型仪表
  5. springboot map数据类型注入_Spring Boot(五):春眠不觉晓,Mybatis知多少
  6. php保存文件的方法,php实现编辑和保存文件的方法
  7. IntelliJ IDEA功能和惊喜赠品
  8. Python反向列表
  9. sapply lapply_R编程中的apply(),sapply(),lapply()和tapply()函数
  10. android 崩溃捕获_Android使用FileProvider捕获图像相机图库