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 学习笔记--变量声明与赋值,循环的更多相关文章

  1. linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  2. linux shell学习笔记

    一  变量 声明变量: my_var='ddd'使用变量: ${my_var}设置为只读变量: readonly my_var删除变量: unset my_var 注意只读变量不能被删除 变量类型:( ...

  3. Linux Shell中的变量声明和一些特殊变量

    在SHELL中定义变量比较直接,无类型区别,不需要像Java那样定义好是String还是int等. 声明变量需要遵守或者注意的几点: 变量名和等号之间不能有空格. 变量名首字符必须为字母. 变量名里可 ...

  4. Linux Shell 学习笔记 一 目录结构

    以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin       存放普通用户使用的命令 /sbin     存放管理员可以执行的命令 /home   ...

  5. Linux & Shell 学习笔记【1/2】

    因为工作上的需要,花了些许时间去熟悉学习Linux和Shell,现在也花点事件在此记录一下以加强巩固学习的内容吧.学的不算深入,所以都是一些比较junior的内容. 在下一篇随笔会详述之前写的一个用于 ...

  6. Linux Shell 学习笔记

    2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 ...

  7. Linux Shell学习笔记:exit退出状态代码

    inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...

  8. Linux Shell学习笔记(一)

    Shell,见名知意,就是一个作为用户与Linux OS间接口的程序,允许用户向OS输入需要执行的命令.Shell众多,这里只介绍Bash. 0)实验的Shell版本 显示shell版本: /bin/ ...

  9. linux shell 学习笔记--内部命令学习

    .基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...

随机推荐

  1. ACM解题之(ZOJ 2212) Argus

    题目来源: 点击打开题目 题目翻译: 数据流是实时的,连续的,有序的项目序列.一些例子包括传感器数据,互联网流量,金融代码,在线拍卖以及诸如网络使用日志和电话记录之类的交易日志.同样,对流进行的查询在 ...

  2. mysq数据库的安装和基本操作

    一.数据库的简介 1.什么是数据库? 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独 ...

  3. Shallow Copy & Deep Copy in Python list

    今天在写一个小程序的时候用到了2维数组, 顺手就写成了[[0.0]*length]*length, 结果为了这个小错,调试了半个多小时, 其实之前对与浅复制和深复制已经做过学习和总结, 但真正编程用到 ...

  4. 标准c时间与日期函数

    标准c时间与日期函数 asctime 语法:     #include <time.h>   char *asctime( const struct tm *ptr ); 功能: 函数将p ...

  5. asp.net(c#)中String.Empty、NULL、"" 三者到底有啥区别和联系?

    开门见山,首先看下面代码,你认为结果分别是什么? string str = string.Empty; string str1 = ""; string str2 = null; ...

  6. 17南宁区域赛 J - Rearrangement 【规律】

    题目链接 https://nanti.jisuanke.com/t/19976 题意 给出 一个n 然后 给出 2*n 个数 可以重新排列成两行 然后 相邻的两个数 加起来 不能被三整除 可以上下相邻 ...

  7. 【转】dmesg 时间转换

    dmesg 时间转换 dmesg 输出的格式不易查看,可以通过命令进行转换. 记录如下: 时间查看: date -d "1970-01-01 UTC `echo "$(date + ...

  8. Linux Shell编程 test命令

    概述 test 命令是Shell 脚本中用来进行条件判断的. test命令示例 按照文件类型进行判断 测试选项 作 用 -b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) -c ...

  9. C语言math.h库函数中atan与atan2的区别

    源: C语言math.h库函数中atan与atan2的区别 C语言中的atan和atan2

  10. 主攻ASP.NET.4.5 MVC4.0之重生:图书推荐

    前段时间看完ASP.Net4.0 框架揭秘 ,目前现在此书在家睡大觉,看得云里雾里,实战有些东西用不上,感觉好可惜. 大概看了一下这本书,这本书很多功能,可以在实际项目中能用上的方法和技巧.小小推荐, ...