linux shell 学习笔记--变量声明与赋值,循环
Bash 变量是不分类型的
------------------------
不像其他程序语言一样,Bash 并不对变量区分"类型".本质上,Bash 变量都是字符串.
但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值
是否只有数字.
赋值
a=
a="sdsd" #注意=左右不要有空格,否则就变成比较字符串操作
引用
$a #借助$符
操作字符串
字符穿连接
a="sdfs"
b="dsds"
c=$a$b
--------------
Bash 支持超多的字符串操作,操作的种类和数量令人惊异.但不幸的是,这些工具缺乏集中性.
一些是参数替换的子集,但是另一些则属于UNIX 的expr 命令.这就导致了命令语法的不一致和
功能的重叠,当然也会引起混乱.
字符串长度
${#string}
expr length $string
expr "$string" : '.*'
stringZ=abcABC123ABCabc echo ${#stringZ} #
echo `expr length $stringZ` #
echo `expr "$stringZ" : '.*'` #
从字符串开始的位置匹配子串的长度
expr match "$string" '$substring'
$substring 是一个正则表达式
expr "$string" : '$substring'
$substring 是一个正则表达式
stringZ=abcABC123ABCabc
# |------| echo `expr match "$stringZ" 'abc[A-Z]*.2'` #
echo `expr "$stringZ" : 'abc[A-Z]*.2'` #
expr index $string $substring
匹配到子串的第一个字符的位置.
stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12` #
# C position. echo `expr index "$stringZ" 1c` #
# 'c' (in # position) matches before ''.
在 C 语言中最近的等价函数为strchr().
提取子串
${string:position}
在 string 中从位置$position 开始提取子串.
如果$string 为"*"或"@",那么将提取从位置$position 开始的位置参数,[]
${string:position:length}
在 string 中从位置$position 开始提取$length 长度的子串.
################################Start
Script#######################################
stringZ=abcABC123ABCabc
# .....
# -based indexing. echo ${stringZ:} # abcABC123ABCabc
echo ${stringZ:} # bcABC123ABCabc
echo ${stringZ:} # 23ABCabc echo ${stringZ::} # 23A
# 个字符长度的子串.
子串削除
${string#substring}
从$string 的左边截掉第一个匹配的$substring
${string##substring}
从$string 的左边截掉最后一个个匹配的$substring
stringZ=abcABC123ABCabc
# |----|
# |----------| echo ${stringZ#a*C} # 123ABCabc
# 截掉'a'和'C'之间最近的匹配. echo ${stringZ##a*C} # abc
# 截掉'a'和'C'之间最远的匹配.
${string%substring}
从$string 的右边截掉第一个匹配的$substring
${string%%substring}
从$string 的右边截掉最后一个匹配的$substring
stringZ=abcABC123ABCabc
# ||
# |------------| echo ${stringZ%b*c} # abcABC123ABCa
# 从$stringZ 的后边开始截掉'b'和'c'之间的最近的匹配 echo ${stringZ%%b*c} # a
# 从$stringZ 的后边开始截掉'b'和'c'之间的最远的匹配
子串替换
${string/substring/replacement}
使用$replacement 来替换第一个匹配的$substring.
${string//substring/replacement}
使用$replacement 来替换所有匹配的$substring.
stringZ=abcABC123ABCabc echo ${stringZ/abc/xyz} # xyzABC123ABCabc
# 用'xyz'来替换第一个匹配的'abc'. echo ${stringZ//abc/xyz} # xyzABC123ABCxyz
# 用'xyz'来替换所有匹配的
个人觉得条件判断框的格式要求很严格,'[' 前后都必须有一个空格
if 结构 if [ condition1 ]
then
if [ condition2 ]
then
do-something # 这里只有在condition1 和condition2 都可用的时候才行.
fi
elif [ condition3 ]
then
do ...
else
do ....
fi case 结构 注意要以 ;;结束
case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
*) echo "dfsdf" ;; #*表示default,若上面匹配都不成功则会执行
esac for 结构 这是一个基本的循环结构.它与C 的相似结构有很大不同.
# 标准语法.
for a in 1 2 3 4 5 6 7 8 9 10
do
echo -n "$a "
done LIMIT=10 for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
for ((a=1; a <= LIMIT ; a++)) # 双圆括号, 并且"LIMIT"变量前边没有 "$".
do
echo -n "$a "
done while [condition]
do
command...
done 和 for 循环一样,如果想把do 和条件放到同一行上还是需要一个";".
while [condition]; do C风格语法
while (( a <= LIMIT )) # 双圆括号, 变量前边没有"$".
do
echo -n "$a "
((a += 1)) # let "a+=1"
# Yes, 看到了吧.
# 双圆括号允许像C 风格的语法一样增加变量的值.
done until
这个结构在循环的顶部判断条件,并且如果条件一直为false 那就一直循环下去.(与while
相反)
until [condition-is-true]
do
command...
done
注意: until 循环的判断在循环的顶部,这与某些编程语言是不同的.
与 for 循环一样,如果想把do 和条件放在一行里,就使用";".
until [condition-is-true]; do
linux shell 学习笔记--变量声明与赋值,循环的更多相关文章
- linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...
- linux shell学习笔记
一 变量 声明变量: my_var='ddd'使用变量: ${my_var}设置为只读变量: readonly my_var删除变量: unset my_var 注意只读变量不能被删除 变量类型:( ...
- Linux Shell中的变量声明和一些特殊变量
在SHELL中定义变量比较直接,无类型区别,不需要像Java那样定义好是String还是int等. 声明变量需要遵守或者注意的几点: 变量名和等号之间不能有空格. 变量名首字符必须为字母. 变量名里可 ...
- Linux Shell 学习笔记 一 目录结构
以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin 存放普通用户使用的命令 /sbin 存放管理员可以执行的命令 /home ...
- Linux & Shell 学习笔记【1/2】
因为工作上的需要,花了些许时间去熟悉学习Linux和Shell,现在也花点事件在此记录一下以加强巩固学习的内容吧.学的不算深入,所以都是一些比较junior的内容. 在下一篇随笔会详述之前写的一个用于 ...
- Linux Shell 学习笔记
2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 ...
- Linux Shell学习笔记:exit退出状态代码
inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...
- Linux Shell学习笔记(一)
Shell,见名知意,就是一个作为用户与Linux OS间接口的程序,允许用户向OS输入需要执行的命令.Shell众多,这里只介绍Bash. 0)实验的Shell版本 显示shell版本: /bin/ ...
- linux shell 学习笔记--内部命令学习
.基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...
随机推荐
- BGP Basic Knowledge
声明: 这篇文章是对网上的这几篇博客的摘录,仅供我自己以后看的时候方便,且不需要再看太多的内容, 如果大家对BGP不是很了解,建议看原博客或者直接看RFC BGP只支持基于目的地址的路由,即路 ...
- Python之正则表达式与常用模块(Day19)
一.正则表达式:匹配字符串的一种规则 正则表达式的在线测试工具: http://tool.chinaz.com/regex/ 字符组: 正则 待匹配字符 匹配结果 说明 [0123456789] 8 ...
- Loadrunder脚本篇——web_custom_request做接口测试
一.POST + JSON格式参数 例: web_custom_request("create", "URL=http://xxx.xxx.x.xx:1600/ditui ...
- Python学习进程(2)Python环境的搭建
本节主要介绍在windows和Linux平台上如何搭建Python编程环境. (1)查看Python版本: windows: C:\Users\JMSun>python 'pyt ...
- blast+学习之search tools
search tools:blastn, blastp, blastx, tblastx, tblastn, psiblast, rpsblast, and rpstblastn 1.blastn: ...
- PHP的异常处理、错误的抛出及错误回调函数
一.错误.异常和等级常量表 error:不能再编译期发现运行期的错误,不如试图echo输出一个未赋值的变量,这类问题往往导致程序或逻辑无法继续下去而需要中断. exception:程序执行过程中出现意 ...
- get_called_class--后期静态绑定("Late Static Binding")类的名称
get_called_class--后期静态绑定("Late Static Binding")类的名称 string get_called_class ( void ) 获取静态方 ...
- L1范数与L2范数正则化
2018-1-26 虽然我们不断追求更好的模型泛化力,但是因为未知数据无法预测,所以又期望模型可以充分利用训练数据,避免欠拟合.这就要求在增加模型复杂度.提高在可观测数据上的性能表现得同时,又需要兼顾 ...
- create_workqueue和create_singlethread_workqueue【转】
本文转载自:http://bgutech.blog.163.com/blog/static/18261124320116181119889/ 1. 什么是workqueueLinux中的Workque ...
- 【P2015】二叉苹果树(树状DP)
蒟蒻弱弱的开始做树形DP了,虽然做了这道题还是有很多不懂得地方. 这道题大意就是有一棵树,只保留其中q条边,求出剩余边的最大权值. 然后开始考虑怎么做(其实是看着题解出思路....),很容易可以想出D ...