shell操作字符串
SHELL的字符替换SHELL的字符替换shell的字符替换变量替换:一:简单赋值和替换a=bcd$ echo $abcd$ echo ${a} ????bcd二:变量扩充除了shell中的meta,其它的[^a-zA-Z0-9_]几乎都可以作单词边界。
同sed中关于单词边界[^a-zA-Z0-9_]的描述。
/forum/24/20040825/393964.html这些功能有时候会在程序中有意想不到的作用!例如:$ a=bcd$ echo ${a}.bbcd.b$ echo $a.phpbcd.php$ echo $a%bbcd%b$ echo /$a/bc/bcd/bc对于shell中的meta字符,则backslash。
$ echo $a\*bbcd*b三:变量中的变量$ a=bcd$ b=efg$ c=$a$b$ echo $cbcdefg$ d=$c.ghi$ echo $dbcdefg.ghi思考:若变量互相嵌套,会怎样呢?四:变量的特异功能到网中人的啦!(ps:重写真是没激情啊)file=/dir1/dir2/dir3/my.file.txt我们可以用${ } 分别替换获得不同的值:${file#*/}:从变量file的字符串左边开始,删除字符直到第一个“/”:dir1/dir2/dir3/my.file.txt${file##*/}:从变量file的字符串左边开始,删除字符直到最后一个“/”:my.file.txt ${file#*.}:从变量file的字符串左边开始,删除字符直到第一个“.”:file.txt ${file##*.}:从变量file的字符串左边开始,删除字符直到最后一个“.”:txt其实,在“#”后面,无非就是一个匹配问题,不限于两个,你可以放任意个字符,还可以用shell中另外的通配符“?”“[…]”“[!…]”,例如:$ echo ${file#????}1/dir2/dir3/my.file.txt$ echo ${file#*[0-9]}/dir2/dir3/my.file.txt$ echo ${file#/dir1/dir[0-9]}/dir3/my.file.txt“#”:相当于最小匹配,遇到一个最小的符合其后表达式的字符串(单个或多个)即中止匹配动作;“##”:相当于最大匹配,它尽可能的匹配更多的字符。
我们可以拿“*”来说明:* 在shell中表示匹配任何符号包括空。
当它在只有一个# 的变量替换中,受最小匹配的影响,它不会匹配任何可打印字符,只匹配一个空,也就是什么也不匹配,你完全可以忽略它的存在;当在有两个## 的变量替换中,受最大匹配的影响,一个* 表示匹配整个字符串。
如果想匹配字符“*”时,要在“*”前加一个“\”,其后的“*”失去通配符的功能。
但是还有一种例外情况(请接着看)例:$ file2=abcd.efgh.ijkl.oopp$ echo ${file2#*.*.*.*}$ echo ${file2##*.*.*.*}想想上面两个的输出是什么?$ echo ${file2#*.*.*.*}oopp$ echo ${file2##*.*.*.*}空??知道为什么吗?因为:“*”匹配任何符号包括空。
遇到一个“#”时,最后一个“*”就匹配“空”去了。
看下面的:$ echo ${file2#*.*.*.?}opp$ echo ${file2#*.*.*.?*}opp$ echo ${file2##*.*.*.?}opp$ echo ${file2##*.*.*.?*}空do you know?$ echo $file3*ab*de*cd看看下面将输出什么?$ echo ${file3#*ab}*de*cd$ echo ${file3#**}*ab*de*cd$ echo ${file3##**}空$ echo ${file3#\*ab}*de*cd$ echo ${file3#\**}ab*de*cd$ echo ${file3##\**}空$ echo ${file3#*a}b*de*cd$ echo ${file3#\*a}b*de*cd不知各位有没有发现,“*”在一个“#”中时,并不一定代表“空”,它可能代表一个字符“*”也可能代表其他的什么字符,如上例的:“$ echo ${file3#*a}”输出为“b*de*cd”,其实这还是符合最小匹配理论的。
这个表达式的意思是:从变量file3的字符串左边开始删除字符,直到遇到第一个字符“a”。
所以不要和“$ echo ${file3#\*a}”混淆,虽然两个结果是一样,但意思是不一样的。
再举几个例子,相信大家更容易理解这段话:$ echo $file3*ab*de*cd*ab*de //注意:出现两个“*ab”$ echo ${file3#*a}b*de*cd*ab*de //删除字符,直到出现第一个“a”,“*”为通配符$ echo ${file3##*a}b*de //删除字符,直到出现第二个“a”,“*”为通配符$ echo ${file3##\*a}b*de*cd*ab*de //删除字符串“*a”,“*”在“\”表示字符“*”除了通配符“*”比较难理解一点,其他的shell通配符就都很容易了。
至于“%”,和“#”不同的地方,就是从变量字串右部开始。
${file%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/” :/dir1/dir2/dir3 ${file%%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”:(空值) ${file%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:/dir1/dir2/dir3/my.file${file%%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”:/dir1/dir2/dir3/my 单匹配格式${var/被替换字符/替换字符}全匹配格式${var//被替换字符/替换字符}例子:[test]# echo ${ip/./@}324@2354.329.5324[test]# echo ${ip/./,}324,2354.329.5324[test]# echo ${ip/./ }324 2354.329.5324[test]# echo ${ip//./ }324 2354 329 5324[test]# echo ${ip//./,}324,2354,329,5324[test]# echo ${ip//./@}[email=324@2354@329@5324]324@2354@329@5324[/email]总结一点结果.${}中:/代表字符串的替换.:代表字符串的提取.#和%公别代表左截和右截.shell编程范例之字符串操作字符串:简称“串”。
有限字符的序列。
数据元素为字符的线性表,是一种数据的逻辑结构。
在计算机中可有不同的存储结构。
在串上可进行求子串、插入字符、删除字符、置换字符等运算。
字符:计算机程序设计及操作时使用的符号。
包括字母、数字、空格符、提示符及各种专用字符等。
照这样说,之前介绍的数值操作中的数字,逻辑运算中的真假值,都是以字符的形式呈现出来的,是一种特别的字符,对它们的运算只不过是字符操作的特例罢了。
而这里将研究一般字符的运算,它具有非常重要的意义,因为对我们来说,一般的工作都是处理字符而已。
这些运算实际上将围绕上述两个定义来做。
第一、找出字符或者字符串的类型,是数字、字母还是其他特定字符,是可打印字符,还是不可打印字符(一些控制字符)。
第二、找出组成字符串的字符个数和字符串的存储结构(比如数组)。
第三、对串的常规操作:求子串、插入字符、删除字符、置换字符、字符串的比较等。
第四、对串的一些比较复杂而有趣的操作,这里将在最后介绍一些有趣的范例。
1. 字符串的属性1.1 字符串的类型字符有可能是数字、字母、空格、其他特殊字符,而字符串有可能是它们任何一种或者多种的组合,在组合之后还可能形成一个具有特定意义的字符串,诸如邮件地址,URL地址等。
概要示例: 下面我们来看看如何判断字符的类型。
// 数字或者数字组合(能够返回结果,即程序退出状态是0,说明属于这种类型,反之不然)$ i=5;j=9423483247234;$ echo $i | grep [0-9]*5$ echo $j | grep [0-9]*9423483247234$ echo $j | grep [0-9]* >/dev/null$ echo $?// 字符组合(小写字母、大写字母、两者的组合)$ c="A"; d="fwefewjuew"; e="fewfEFWefwefe"$ echo $c | grep [A-Z]A$ echo $d | grep "[a-z]*"fwefewjuew$ echo $e | grep "[a-zA-Z]*"fewfEFWefwefe// 字母和数字的组合$ ic="432fwfwefeFWEwefwef"$ echo $ic | grep "[0-9a-zA-Z]*"432fwfwefeFWEwefwef// 空格或者Tab键等$ echo " " | grep " "$ echo -e "\t" | grep "[[:space:]]" #[[:space:]]会同时匹配空格和TAB键$ echo -e " \t" | grep "[[:space:]]"$ echo -e "\t" | grep "<tab>" #<tab>为在键盘上按下TAB键,而不是字符<tab>// 匹配邮件地址$ echo "test2007@" | grep "[0-9a-zA-Z\.]*@[0-9a-zA-Z\.]"test2007@// 匹配URL地址(以http链接为例)$ echo "/article.jsp?newsid=10135" | grep "http://[0-9a-zA-Z\./=?]*"/article.jsp?newsid=10135说明:[1] /dev/null和/dev/zero是非常有趣的两个设备,它们都犹如一个黑洞,什么东西掉进去都会消失殆尽;后者则是一个能源箱,你总能从那里取到0,直到你退出。
shell 字符串详解
shell 字符串详解字符串在 Shell 脚本中扮演着重要的角色,因为它们是一种表示和操作文本数据的方式。
在本文中,我们将详细讨论 Shell 字符串的特性和常见用法。
Shell 字符串可以由单引号(')或双引号(")括起来。
单引号会完全保留字符串中的原始字符,不进行任何处理。
而双引号可以扩展变量和转义特殊字符。
1. 字符串赋值:在 Shell 中,可以直接利用等号(=)将文本数据赋值给一个变量,从而创建一个字符串。
例如:str="Hello, World!"2. 字符串长度:要获取字符串的长度,可以使用 Shell 的内置变量${#string}。
例如:length=${#str}echo "字符串的长度为:$length"3. 字符串拼接:在 Shell 中,可以使用拼接操作符(.)将多个字符串拼接在一起。
例如:str1="Hello"str2="World"concat_str=$str1$str2echo "拼接后的字符串为:$concat_str"4. 字符串切片:Shell 提供了对字符串进行切片操作的功能。
你可以通过指定起始位置和长度来截取字符串的一部分。
例如:substring=${str:6:5}echo "截取的子串为:$substring"5. 字符串替换:使用 Shell 的字符串替换功能,可以在一个字符串中匹配并替换特定的子字符串。
例如:new_str=${str/Hello/Hi}echo "替换后的字符串为:$new_str"6. 字符串查找:要在一个字符串中查找特定的子字符串,可以使用 Shell 的字符串查找功能。
例如:if [[ $str == *"World"* ]]; thenecho "找到了子串 World"elseecho "未找到子串 World"fi以上是一些常用的 Shell 字符串操作。
shell脚本字符串和数组的使用操作方法
shell脚本字符串和数组的使⽤操作⽅法字符串可以使⽤单引号和双引号定义字符串变量但是单引号中不⽀持变量解析#! /bin/bashusername="mayuan"str_1="hello ${username}"str_2='hello ${username}'echo $str_1 # hello mayuanecho $str_2 # hello ${username}获取字符串的长度#! /bin/bashusername="mayuan"echo ${#username} # 6截取字符串#! /bin/bashusername="mayuan"echo ${username:1:3} # 从第⼆个字符开始截取3个字符输出"ayu"查找指定字符#! /bin/bashusername="mayuan"echo $(expr index "${username}" y) #查找y在指定字符的位置数组#! /bin/basharr=(1 2 3 4 5)echo ${arr[0]} #输出1echo ${arr[1]} #输出2获取数组长度#! /bin/basharr=(1 2 3 4 5)echo ${#arr[@]} #输出5echo ${#arr[*]}PS:下⾯给⼤家介绍shell将字符串分隔成数组#!/bin/basha="hello,world,nice,to,meet,you"#要将$a分割开,先存储旧的分隔符OLD_IFS="$IFS"#设置分隔符IFS=","#如下会⾃动分隔arr=($a)#恢复原来的分隔符IFS="$OLD_IFS"#遍历数组for s in ${arr[@]}doecho "$s"done变量$IFS存储着分隔符,这⾥我们将其设为逗号 "," OLD_IFS⽤于备份默认的分隔符,使⽤完后将之恢复默认。
shell字符串的处理(截取,连接,匹配,替换,翻转)
shell字符串的处理(截取,连接,匹配,替换,翻转)shell 字符串的处理(截取,连接,匹配,替换,翻转)本节分享下,字符串处理的内容,包括:截取,连接,匹配,替换,翻转等。
1,字符串的截取⽅法⼀:代码⽰例:echo $a|awk ’{print substr( ,1,8)}’substr是awk中的⼀个⼦函数,对第⼀个参数的进⾏截取,从第⼀个字符开始,共截取8个字符,如果不够就从第⼆个字符中补充⽅法⼆代码⽰例:echo $a|cut -b2-8cut:对标准输⼊的字符串进⾏处理cut -bn-m:以byte为单位,从第n个byte开始,取m个cut -bn,m:以byte为单位,截取第n,m个bytecut -b-n,m:以byte为单位,截取1-n,和第m个-c:以charactor为单位-d:指定分隔符,默认为tab-s:使标准输⼊中没有delimetercut -f1:截取第1个域⽅法三a=123456echo $⽅法四使⽤sed截取字符串的最后两位代码⽰例:echo $test |sed ’s//(.*/)/(../)$//’截取字符串的前2位代码⽰例:echo $test |sed ’s/^/(../)/(.*/)//’2,字符串的⽐较好像没有什么可以⽐较的3,字符串的连接$a$b或者$string4,字符串的翻转⽅法⼀:使⽤rev⽅法⼆:编写脚本实现代码⽰例:#!/usr/bin/awk -f{revline = ""for (i=1;i<=length;i++){revline = substr(,i,1) revline}}END{print revline}5,字符串的匹配grepegrepfgrep6,字符串的排序sort7,字符串的替换bash中:代码⽰例:%x=ababcd%echo $ # 只替换⼀个bbcdabcd%echo $ # 替换所有bbcdbbcdsh中:如何替换/使⽤sed替换所有匹配代码⽰例:echo $test |sed ’s/xx/yy’替换单个匹配8,得到字符串的长度:bash当中$或者expr "$VAR" : ’.*’9,判断字符串是否为数字10,得到字符串中某个字符的重复次数代码⽰例:echo $a |tr "x" "/n" | -l得到的结果需要减去1或者代码⽰例:echo $a |awk -F"x" ’{print NF-1}’11,得到字符串中某个string的重复次数12,将⼀批⽂件中的所有string替换代码⽰例:for i in file_listdovi $i <<-!:g/xxxx/s//XXXX/g:wq!done13,如何将字符串内每两个字符中间插⼊⼀个字符使⽤代码⽰例:echo $test |sed ’s/../&[insert char]/g’======================================================================================================================================概述我们⽇常应⽤中都离不开⽇志。
shell数值转为十六进制字符串
在Shell脚本中,你可以使用printf命令将数值转换为十六进制字符串。
printf命令允许你格式化输出,并且支持多种转换选项,包括将数字转换为十六进制。
以下是一个示例,演示了如何将数值转换为十六进制字符串:
bash
#!/bin/bash
# 定义数值
num=255
# 使用printf将数值转换为十六进制字符串
hex_string=$(printf"%x""$num")
# 输出结果
echo"十六进制字符串: $hex_string"
在上面的示例中,num变量保存了要转换的数值。
printf "%x" "$num"将数值转换为十六进制字符串,并将结果存储在hex_string变量中。
最后,使用echo命令输出结果。
当你运行这个脚本时,它会输出以下内容:
makefile
十六进制字符串: ff
这里,数值255被成功转换为了十六进制字符串ff。
你可以根据需要修改num变量的值来进行不同的转换。
1。
Shell脚本编写的高级技巧使用正则表达式进行字符串匹配和替换
Shell脚本编写的高级技巧使用正则表达式进行字符串匹配和替换Shell脚本编写的高级技巧:使用正则表达式进行字符串匹配和替换在Shell脚本编写过程中,我们经常需要对字符串进行处理。
而正则表达式是一种强大的工具,能够在字符串中进行模式匹配和替换操作。
本文将介绍如何使用正则表达式进行字符串匹配和替换的高级技巧。
一、基本概念正则表达式是一种用来描述字符模式的工具,它由一系列字符和特殊字符组成。
在Shell脚本中,我们可以使用正则表达式来检测字符串是否符合某种模式、提取符合模式的部分字符串、替换字符串中的某些内容等操作。
在正则表达式中,一些常用的特殊字符有:1. ^:匹配字符串的开头位置。
2. $:匹配字符串的末尾位置。
3. .:匹配任意单个字符。
4. *:匹配前面的字符零次或多次。
5. +:匹配前面的字符一次或多次。
6. ?:匹配前面的字符零次或一次。
7. []:匹配方括号中的任意一个字符。
8. [a-z]:匹配任意一个小写字母。
9. [A-Z]:匹配任意一个大写字母。
10. [0-9]:匹配任意一个数字。
11. \:转义字符,用来匹配特殊字符本身。
二、基本用法1. 字符串匹配在Shell脚本中,我们可以使用正则表达式来判断一个字符串是否匹配某种模式。
使用“=~”操作符可以进行匹配,例如:```shellif [[ $str =~ pattern ]]; thenecho "Matched"elseecho "Not matched"fi```其中,$str为待匹配的字符串,pattern为正则表达式模式。
如果$str 匹配上了该模式,则输出"Matched";否则输出"Not matched"。
2. 字符串提取使用正则表达式可以从一个字符串中提取符合模式的部分字符串。
在Shell脚本中,我们可以使用“=~”操作符配合正则表达式的()来进行提取,例如:```shellif [[ $str =~ pattern ]]; thenresult="${BASH_REMATCH[1]}"echo "Extracted string: $result"elseecho "No match"fi```其中,$str为待提取的字符串,pattern为正则表达式模式。
shell脚本——字符串操作(长度,查找,替换)
shell脚本——字符串操作(长度,查找,替换)表达式 含义${var} 变量var的值, 与$var相同${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *${var+OTHER} 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串${var:+OTHER} 如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串${var?ERR_MSG} 如果var没被声明, 那么就打印$ERR_MSG *${var:?ERR_MSG} 如果var没被设置, 那么就打印$ERR_MSG *${!varprefix*} 匹配之前所有以varprefix开头进⾏声明的变量${!varprefix@} 匹配之前所有以varprefix开头进⾏声明的变量在做shell批处理程序时候,经常会涉及到字符串相关操作。
有很多命令语句,如:awk,sed都可以做字符串各种操作。
其实shell内置⼀系列操作符号,可以达到类似效果,⼤家知道,使⽤内部操作符会省略启动外部程序等时间,因此速度会⾮常的快。
⼀、判断读取字符串值加⼊了“*” 不是意思是:当然, 如果变量var已经被设置的话, 那么其值就是$var.[chengmo@localhost ~]$ echo ${abc-'ok'}ok[chengmo@localhost ~]$ echo $abc[chengmo@localhost ~]$ echo ${abc='ok'}ok[chengmo@localhost ~]$ echo $abcok如果abc 没有声明“=" 还会给abc赋值。
shell中的字符串操作和数学运算
shell中的字符串操作和数学运算字符串操作变量赋值:说明:变量值可以⽤单引号、双引号、或者不加任何引号来赋值给变量变量名="变量值"变量名='变量值'变量名=变量值例如:str="hello world"注意:=左右不能有空格,否则会报错command not found区别:1.单引号的不能使⽤变量,$会被认为是个普通字符;字符串间可以有空格2.双引号可以使⽤变量;字符串间可以有空格3.不加任何引号的只能赋值连续的字符串,中间不能有空格,否则会报命令错误字符串连接直接将两个字符串写在⼀起就可以,可以使⽤变量可以使⽤单双引号。
不能⽤空格或任何分隔符分开例如:将str变量值连接⼀个空格然后再连接meitianstr=$str' '"meitian"注意:如果字符串后连接的第⼀个字符是,:等标点符号或特殊字符(空格和字母,下划线之外的),可以直接连接不需要单双引号。
例如str=$str:metiian字符串长度expr length "$str"注意:如果是想返回变量的长度,不能使⽤单引号如果想将结果赋值到变量c中,可以使⽤反单引号来实现c=`expr length "$str"`查找字符串位置expr index $str chars(expr index 原字符串要查找的字符串)例如: expr index $str a注意:1.字符串的索引位置是从1开始的,区别于其他语⾔的开始位置02.如果有多个字符要进⾏匹配,会返回索引号最⼩的值(和要匹配的第⼀个字符没关系)字符串截断expr substr $str POS LENGTH(expr substr 原字符串要截断的起始位置要截断的长度)例如:expr substr $str 2 3字符串匹配expr “$str” : REGEXP (expr 原字符串 : 正则表达式)expr match “$str” REGEXP(expr match 原字符串正则表达式)例如:expr "$str" : ".*\([0-9]\{6\}\).*"或expr match "$str" ".*\([0-9]\{6\}\).*"注意:1.有变量的元字符串必须加双引号"$str"2.使⽤expr “$str” : REGEXP匹配时,冒号左右必须有空格3.正则表达式必须⽤引号括起来4.如果正则不加()就捕获不到要匹配的值,只会返回匹配到的字符个数5.expr中的正则表达式需要对(){}等字符使⽤\进⾏转义数学运算运算符:逻辑运算符数值运算符& 与+| 或-< ⼩于*> ⼤于/<= ⼩于等于%>= ⼤于等于()= 等于!= 不等于数学运算公式:expr expressionresult=$[ expression ]例如计算(1+2)*5⽤下⾯两种⽅法:expr \( 1 \+ 2 \) \* 5result=$[(1+2)*5]例如对变量a和变量进⾏⼤⼩⽐较,两种⽅法如下:expr $num1 \< $num2result=$[$num1<$num2]判断两个值是否相等,两种⽅法如下:expr $num1 = $num2result=$[$num1==$num2]做除法运算,查看结果,只取整了:[root@bjdhj-118-117 ~]# echo $[10/4]2说明:1.使⽤expr必须对运算符<使⽤\进⾏转义,且数值与运算符中间需要空出空格2.使⽤$[]做运算不需要对运算符进⾏转义3.expr判断是否相同⽤=,在中括号[]中进⾏判断需要⽤两个等号==4.shell中使⽤/做除法默认只会保留整数位5.布尔值的结果,⽐如⽐较⼤⼩或是否相等。
Shell脚本中的字符串操作技巧
Shell脚本中的字符串操作技巧一、字符串的定义与赋值在Shell脚本中,字符串的定义与赋值可以通过以下方式实现:1. 使用单引号或双引号将字符串括起来,例如:```shellstr1='Hello World'str2="Shell Script"```2. 直接将命令的输出结果赋给字符串,例如:```shellstr3=$(ls)```在以上例子中,str1的值为"Hello World",str2的值为"Shell Script",str3的值为当前目录下的所有文件列表。
二、字符串的长度计算若想获取一个字符串的长度,可以使用Shell脚本中的内建变量${#string},例如:```shelllength=${#str1}echo "字符串str1的长度为:${length}"```执行以上脚本后,输出的结果为:"字符串str1的长度为:11"。
三、字符串的切片操作1. 获取子字符串:可以使用变量的下标来获取字符串的某一部分,下标从0开始计数。
例如,获取字符串"Shell Script"中的"Shell"可以通过以下方式实现:```shellsub_str=${str2:0:5}echo "获取到的子字符串为:${sub_str}"```执行以上脚本后,输出的结果为:"获取到的子字符串为:Shell"。
其中,0表示起始位置,5表示子字符串的长度。
2. 删除子字符串:可以使用变量的下标来删除字符串中的某一部分,例如,删除字符串"Shell Script"中的"Script"可以通过以下方式实现:```shellnew_str=${str2% Script}echo "删除子字符串后的结果为:${new_str}"```执行以上脚本后,输出的结果为:"删除子字符串后的结果为:Shell"。
linux字符串转数字,Shell编程:字符串与数值之间的转换与计算
linux字符串转数字,Shell编程:字符串与数值之间的转换与计算shell编程往往需要对字符串进⾏操作,有时需要将字符串转为数值,并做加减运算。
以下介绍将字符串转为数值并进⾏计算的⽅法。
# temp1=400d7c#echo $((16#${temp1}+4)) (打印默认是⼗进制输出的)4197760# temp2=$((16#${temp1}+4))# echo "obase=16;${temp2}"|bc400D80以上内容是将字符串转为16进制后进⾏运算,然后再以16进制打印出来。
shell可以在不调⽤第3⽅命令,表⽰不同进制数据。
这⾥总结以下表⽰⽅法。
shell 脚本默认数值是由10 进制数处理,除⾮这个数字某种特殊的标记法或前缀开头. 才可以表⽰其它进制类型数值。
如:以 0 开头就是 8 进制.以0x 开头就是16 进制数.使⽤ BASE#NUMBER 这种形式可以表⽰其它进制.BASE值:2-64.使⽤⽅法:其它进制转为10进制⼋进制转⼗进制:[chengmo@centos5 ~]$ ((num=0123));[chengmo@centos5 ~]$ echo $num;83[chengmo@centos5 ~]$ ((num=8#123));[chengmo@centos5 ~]$ echo $num;83((表达式)),(())⾥⾯可以是任意数据表达式。
如果前⾯加⼊:”$”可以读取计算结果。
⼗六进制转⼗进制:[chengmo@centos5 ~]$ ((num=0xff));[chengmo@centos5 ~]$ echo $num;255[chengmo@centos5 ~]$ ((num=16#ff));[chengmo@centos5 ~]$ echo $num;255base-32转⼗进制:[chengmo@centos5 ~]$ ((num=32#ffff));[chengmo@centos5 ~]$ echo $num;507375base64转⼗进制:[chengmo@centos5 ~]$ ((num=64#abc_));[chengmo@centos5 ~]$ echo $num;2667327⼆进制转⼗进制[chengmo@centos5 ~]$ ((num=2#11111111));[chengmo@centos5 ~]$ echo $num;255⼗进制转为其它进制⼗进制转⼋进制这⾥使⽤到:bc外部命令完成。
五shell变量与字符串操作
五shell变量与字符串操作特点:1 shell变量没有数据类型的区分 2 Shell 把任何存储在变量中的值,皆视为以字符组成的“字符串”。
3 设定的变量值只在当前shell环境中有作⽤ 4 不能以数字开头 5 =号两边不能存在空格 6 若变量值中存在空格,必须⽤括号将变量值括起来 I = “Jack Black”在编写shell时,如果变量未赋值,后续使⽤时不会出现任何错误。
如果要显⽰错误提⽰,则需要命令 shopt -s -o nounsetshopt -s -o nounset解析如下.范例如下[root@localhost ~]# vim test1.sh#!/bin/bashecho $Infomix[root@localhost ~]# sh test1.sh# 未提⽰任何错误[root@localhost ~]# vim test1.sh[root@localhost ~]# vim test1.sh#!/bin/bashshopt -s -o nounset #添加错误提⽰echo $Infomix[root@localhost ~]# sh test1.shtest1.sh:⾏4: Infomix: 为绑定变量 #提⽰错误⼆取得变量值$变量名称=${变量名称}如果变量作为字符的⼀部分输出时,则必须⽤${}将变量括起来,否则shell将⽆法识别变量。
$会将后⾯的所有字符当做变量的⼀部分,肯定是找不到变量的[root@localhost ~]# myname='lsq'[root@localhost ~]# echo $mynamelsq[root@localhost ~]# echo ${myname}lsq[root@localhost ~]# echo hello${myname}boyhellolsqboy[root@localhost ~]# echo hello$mynameboyhello如果后⾯接的不是字符,也不是_下划线,则不需要{}来括起来。
