Shell学习之路-(03-变量、字符串、数组)
来源:互联网 发布:淘宝网返现怎么收款 编辑:程序博客网 时间:2024/05/01 14:29
变量、字符串、数组
1.变量
1.1 常规变量
变量名的命名须遵循如下规则:
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
定义变量时,变量名不加美元符号($),如:
variableName="value"
使用一个定义过的变量,只要在变量名前面加美元符号($)即可,{}可加可不加,如:
your_name="mozhiyan"echo $your_nameecho ${your_name}
已定义的变量,可以被重新定义,如:
myUrl="http://see.xidian.edu.cn/cpp/linux/"echo ${myUrl}myUrl="http://see.xidian.edu.cn/cpp/shell/"echo ${myUrl}
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bashmyUrl="http://see.xidian.edu.cn/cpp/shell/"readonly myUrlmyUrl="http://see.xidian.edu.cn/cpp/danpianji/"
运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用;unset 命令不能删除只读变量。
举个例子:
#!/bin/shmyUrl="http://see.xidian.edu.cn/cpp/u/xitong/"unset myUrlecho $myUrl
上面的脚本没有任何输出。
1.2 特殊变量
例:
#!/bin/bashecho "File Name: $0"echo "First Parameter : $1"echo "First Parameter : $2"echo "Quoted Values: $@"echo "Quoted Values: $*"echo "Total Number of Parameters : $#"
运行结果:
$./test.sh Zara AliFile Name : ./test.shFirst Parameter : ZaraSecond Parameter : AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 2
∗和 @ 的区别
∗和 @ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”1"" 2” … “$n” 的形式输出所有参数。但是当它们被双引号(” “)包含时,”
∗"会将所有的参数作为一个整体,以" 12… n”的形式输出所有参数;”@"会将各个参数分开,以" 1” “2"…" n” 的形式输出所有参数。
2.字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
2.1 单引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
例:
str='this is a string'
2.2 双引号
- 双引号里可以有变量
- 双引号里可以出现转义字符
例1:
your_name='qinjx'str="Hello, I know your are \"$your_name\"! \n"
例2:
your_name="qinjx"greeting="hello, "$your_name" !"greeting_1="hello, ${your_name} !"echo $greeting $greeting_1
2.3 获取字符串长度
长度的获取及通过上面的特殊变量$#演变来的
string="abcd"echo ${#string}
2.4 提取子字符串
例1,截取1-4,三个字符串,注意两种方式的起始位计算方式是不一样的,一种是从0开始,一种是从1开始。
string="alibaba is a great company"echo ${string:1:4} 或者echo `expr substr "$string" 2 4`
例2,截取1后面的全部字符
echo ${string:1}
2.5 查找子字符串
查找首字母所在的位置,例:
string="alibaba is a great company"echo `expr index "$string" is`echo `expr index "$string" llll`echo `expr index "$string" bjhjkhjkhj`echo `expr index "$string" gg`
结果:
32414
可以看出,该函数只检测第一字母第一次出现的位置。
3.数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
3.1 定义数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。
定义数组的一般形式为:array_name=(value1 ... valuen)
例如:
array_name=(value0 value1 value2 value3)或者array_name=(value0value1value2value3)
还可以单独定义数组的各个分量:
array_name[0]=value0array_name[1]=value1array_name[2]=value2
可以不使用连续的下标,而且下标的范围没有限制。
3.2 读取数组
读取数组元素值的一般格式是:${array_name[index]}
例如:
valuen=${array_name[2]}
举个例子:
#!/bin/shNAME[0]="Zara"NAME[1]="Qadir"NAME[2]="Mahnaz"NAME[3]="Ayan"NAME[4]="Daisy"echo "First Index: ${NAME[0]}"echo "Second Index: ${NAME[1]}"
运行脚本,输出:
$./test.shFirst Index: ZaraSecond Index: Qadir
使用@ 或 * 可以获取数组中的所有元素,例如:
${array_name[*]}${array_name[@]}
举个例子:
#!/bin/shNAME[0]="Zara"NAME[1]="Qadir"NAME[2]="Mahnaz"NAME[3]="Ayan"NAME[4]="Daisy"echo "First Method: ${NAME[*]}"echo "Second Method: ${NAME[@]}"
运行脚本,输出:
$./test.shFirst Method: Zara Qadir Mahnaz Ayan DaisySecond Method: Zara Qadir Mahnaz Ayan Daisy
3.3 获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
- 取得数组元素的个数
length=${#array_name[@]}
或者length=${#array_name[*]}
- 取得数组单个元素的长度
lengthn=${#array_name[n]}
变量、字符串、数组的分析就到这边,有感悟时会持续会更新。
注:以上内容来自C语言中文网及本人在使用过程的一些理解整理。如有侵权,请及时通知我,我将马上删除,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看Shell相关教程,感谢您的查阅。
- Shell学习之路-(03-变量、字符串、数组)
- 【Linux学习】之 Shell(变量、数组)
- Shell:环境、变量、字符串、数组
- Shell学习之变量
- Shell—变量、字符串和数组
- Swift学习笔记之变量,常量,字符串,数组
- Shell学习之数组
- bash shell学习之变量
- Shell编程之Shell变量学习总结
- JavaScript学习之路03_字符串和数组
- Shell学习--(3)替换,字符串,数组
- Shell编程之数组、字符串基本操作
- BASH学习之Shell 的变量功能
- shell学习总结之变量引用
- Linux学习之shell变量的运算
- linux学习之shell脚本 ------- 变量
- shell学习笔记之二(变量)
- Linux学习笔记(7) 之Shell变量
- BroadcastReceiver的使用
- C语言中 char * char [] char*[] char**以及指针的理解
- java.lang.OutOfMemoryError异常解决方法
- 贪心-vijos1236上帝的爱好
- TS流解析
- Shell学习之路-(03-变量、字符串、数组)
- IOS unitTest 单元测试
- WPF
- Makefile参考样例4:多个文件夹.c的编译
- 高效工作的信息搜集及管理术---转
- LeetCode题目3
- 【OpenCV】Mat与IplImage、cvMat之间的相互转换
- 简单总结RectF、Rect 和Matrix ,还有Paint的使用方法
- L2-009. 抢红包(排序)