shell变量、函数和数组以及字符串的截取
一、变量
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变量、函数和数组以及字符串的截取的更多相关文章
- 关于shell脚本函数、数组、字符串截取、svn更新发布实例
#/bin/bash #功能:QA服根据模板创建区配置文件并提交到svn上. SOURCE_PATH=/data/source_code SVN_PATH=/code/psm #svn发布目录,要 ...
- shell脚本函数与数组
前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...
- 黑马程序员—C语言的函数、数组、字符串
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
- shell变量定义与数组-1
1.查看系统所有shell和默认shell 查看系统所有的shell: cat /etc/shells 查看系统默认shell: echo $SHELL 2.第一个shell脚本,打印字符串Hello ...
- shell脚本函数及数组
函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...
- 复习C++_基础、函数、数组、字符串
程序的开发过程 程序 源程序:用源语言写的,有待翻译的程序: 目标程序:源程序通过翻译程序加工以后生成的机器语言程序: 可执行程序:连接目标程序以及库中的某些文件,生成的一个可执行文件,例如Windo ...
- JS 从一个字符串中截取两个字符串之间的字符串
/************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...
- 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- shell变量,字符串,数组
一.shell变量定义: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头: 中间不能有空格,可以使用下划线: 不能使用标点符号: 不能使用bash里的关键字. 变量使用: 使用一个定义过的 ...
随机推荐
- PJzhang:查看你的微信、QQ、新浪微博都授权给过谁
猫宁!!! 个人信息的保护,需要时刻关注,不能有丝毫懈怠. 保护个人信息,有两个方向,一个是减少个人信息外泄,另一个是上传大量鱼龙杂的个人信息,难以分辨,混淆视听. 这里不谈第二个, ...
- 【机器学习理论】概率论与数理统计--假设检验,卡方检验,t检验,F检验,方差分析
显著性水平α与P值: 1.显著性水平是估计总体参数落在某一区间内,可能犯错误的概率,用α表示. 显著性是对差异的程度而言的,是在进行假设检验前确定的一个可允许作为判断界限的小概率标准. 2.P值是用来 ...
- Foxmail:导入联系人
打开“Foxmail”之后,如下图所示: 接下来,在左下角找到箭头指示的位置处,点击此处: 接下来,在邮箱的右上角找到如图所示的位置,鼠标点击此处: 点击之后,如下图所示,找到“导入”: 点击“导入& ...
- Nginx的root和alias区别
1.root 下面举例说明: location /i/ { root /data/w3; } 请求 http://foofish.net/i/top.gif 这个地址时,那么在服务器里面对应的真正的资 ...
- JS延迟加载的几种方式
参考链接:https://blog.csdn.net/meijory/article/details/76389762
- ip速度检测与云主机|VPS的抉择:bandwagonhost digitalocean hostWind Vultr Linode
最近的梯子断了,网站又被注销了.又到了挑vps的时间了.其实, 这些东西,烦死人了.挺浪费生命的. 首先速度测试, MTR测试 网站速度测试 17CE. http://tool.chinaz.com/ ...
- session到底是何时何地生成的
关于session,之前只是在用,从没考虑到底怎么生成的 今天有空我做了个实验,把监控了一下访问某网站第一二次的请求响应详细信息,终于搞明白了,好了,开始放图 这里发起一个请求,然后我们看下第一次请 ...
- Durable NAND flash memory management
词条积累 1.NAND flash memory http://www.searchstorage.com.cn/whatis/word_6052.htm http://baike.baidu.com ...
- 【Linux-驱动】RTC设备驱动架构
在Linux操作系统中,RTC设备驱动的架构如下图所示: RTC设备驱动涉及的文件:class.c.rtc-dev.c : 建立/dev/rtc0设备,同时注册相应的操作函数.interface.c ...
- 【C++ 补习】Copy Control
C++ Primer 5th edition, chapter 13. The Rule of Three If a class needs a destructor, it almost surel ...