shell 字符串截取问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 字符串截取问题相关的知识,希望对你有一定的参考价值。

比如说 有个文件路径 qqq/asdf/wer/aaa.txt 我想取到 aaa.txt 应该怎么取
还有就是 var1 = 10 var2 = 10
if [$var1 -eq $var2];then
echo "0"
fi
出现: command not found 10 错误 怎样解决

先可以讲字符串赋值:
test=qqq/asdf/wer/aaa.txt

这样就可以获取aaa.txt:
$test##*/

问:出现: command not found 10 错误 怎样解决
原因:是应为你的参数赋值时是“=”前后有空格导致错误追问

赋值没有问题 就是 if判断的时候出现问题 这是什么情况呢

追答

if [$var1 -eq $var2];then 的[] 前后要有空格,应该写成这种样式if [ $var1 -eq $var2 ];then

追问

第一个IF 没问题 第二个出错 他俩的值都是10

追答

看了下你写的shell,输出结果不为0,
因为第一个if语句就存在问题,,if [ $var1 = $filename ],是使用10和201202JG08.txt比较,所以直接跳出循环了

参考技术A if [$var1 -eq $var2];then 这个中括号,两边需要空格的
basename 可以不
echo qqq/asdf/wer/aaa.txt |awk -F '/' 'print $4'
参考技术B 格式不对
应该是if [ $var1 - eq $var2 ] ; then
echo "0";
fi追问

出现了 这个 错误 : integer expression expected

追答

if [ $var1 = $filename ] 这句有点问题.
“="这个是“==”或者是-eq.

shell中按照指定字符截取两边的数据,放到变量里

shell中按照指定字符截取两边的数据,放到变量里。 如var=a|b,按照|截取var中的a和b,分别放到A变量和B变量

#!/bin/sh
#filename: splitvar.sh
#author : cold night
# usage: ./splitvar.sh '分隔符' '字符串'
A=`echo $2 | awk -F"$1" 'print $1'`
B=`echo $2 | awk -F"$1" 'print $2'`

echo $A
echo $B

------------------------------------------------
把脚本保存为splitvar.sh, 给这个脚本执行权限:
chmod +x splitvar.sh
在脚本当前目录下使用下面格式执行
./splitvar.sh '分隔符' '要分割字符串'
比如
./splitvar.sh 'c' 'aacbb'
会输出:
aa
bb
参考技术A OLDIFS=$IFS
IFS="|"
ary=($var)
echo $ary[0]
echo $ary[1]
IFS=$OLDIFS

这个就是用IFS的设定,来把字串分成字串数组。
参考技术B #!/bin/sh
var=a|b
var1 =`echo val|awk -F "|" 'print$1'`
var2 =`echo val|awk -F "|" 'print$2'`

以上是关于shell 字符串截取问题的主要内容,如果未能解决你的问题,请参考以下文章

shell字符串截取

如何用shell脚本语言去截取字符串

Shell字符串截取(非常详细)

Shell 字符串截取

shell字符串截取

shell中按照指定字符截取两边的数据,放到变量里