str=${str##*(}
str=${str%)*}
Linux下获得目录路径比较常用的是pwd命令和getcwd()函数了,但是有时候并不能很容易的match一些比较常用的需求。问题来自闪电的一个问题,他写了一个程序放在一个文件夹里面交给客户,这个文件夹里面有若干应用程序和若干文件,客户可以把这个文件夹放在任意的目录,然后客户使用绝对路径跑文件夹里面的一个程序:/program/a/b/c/d/e/folder/fgh.sh,在客户跑的fgh.sh这个程序里要用到和它在同一个文件夹的其他文件:/program/a/b/c/d/e/folder/1.txt。
这样就需要在fgh.sh这个程序里面得到它所在目录的绝对路径:/program/a/b/c/d/e/folder。pwd命令只能得到当前目录,也就是跑程序时所在的目录,但不能得到程序所在的目录。dirname恰好就能实现这个功能,使用dirname $0就可以解析出所要的绝对路径/program/a/b/c/d/e/folder。
后来有想了一下,dirname这个命令实在是不太常用,很难想起。常规一点,其实也可以在程序里面做判断,如果客户使用的是绝对路径跑程序,可以得到参数,就是那一长串的东西/program/a/b/c/d/e/folder/fgh.sh,然后从这个参数解析出所要的路径名:
filename=/program/a/b/c/d/e/folder/fgh.sh
filedirectory=${filename%/*.*}
$JAR tf $FILESYS 1> $FILELIST 2>&1
jar tf : jar 的ls。 find -name "*.jar" | xargs -n 1 jar tf
. $PATCHHOME/$INFOFILE . 变量赋值?
EXTRACT_DIR=$2; 参数读取不一致
servhome: C:/ppm/TAICHI_CLUSTERS_YGG/server/TAICHI_CLUSTERS_YGG - Copy/deploy/itg.war
EXTRACT_DIR: C:/ppm/TAICHI_CLUSTERS_YGG/server/TAICHI_CLUSTERS_YGG
shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符`
1. 单引号 ( '' )
# grep Susan phonebook
Susan Goldberg 403-212-4921
Susan Topple 212-234-2343
如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件
# grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符
2. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字符串,经常会用到双引号。
# x=*
# echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo '$x'
$x
# echo "$x"
*
这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。 对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下: shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数
3. 反引号(``)
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
# echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
# echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script.
4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。
BTW
$()和``的区别
反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
但反引号内不能再引用反引号,而$()中可以引用反引号
[root@music b]# cat aa
13
45
mimi bibi
[root@music b]# data=`cat `ls``
没反应,我Ctrl+c了
[root@music b]# data=$(cat `ls`)
[root@music b]# echo $data
13 45 mimi bibi
分享到:
相关推荐
笔记note 是一个用于存储、检索和搜索... mkdir -p ~/binecho "PATH=\$PATH:~/bin" >> ~/.bashrc用法 note new -t tag -t tag2note new -t tag1 -t tag2 -d ~/.bookmarksnote show [id]note list -t tagnote edit [id]
13.2 函数语法函数有两种语法:第一种语法函数名(){代码块第二种语法function 函数名{代码块定义函数return 0 # 返回一个值,可写可不写调用
安卓终端模拟器,绿色无广告,最好用的android shell This is the final version that includes support for Android 1.5 "Cupcake": Term-1.0.65.apk Note: This application used to be named "Android Terminal ...
shell命令setx 设置环境变量设置用户环境变量 -- setx ENV_NAME env_valuecd 切换目录/d -- 支持切换磁盘分区cd /d
其中,包含292个Markdown笔记、153个HTML页面、143个PNG图片、23个Java源代码文件、11个C语言源代码文件、9个文本文件、4个JPG图片文件、4个SQL数据库文件、3个Markdown注释文件、2个Shell脚本文件。该仓库旨在整理...
Linux使用的一些笔记,包括shell命令,软件,一些实用的网站的整理_Linux_note
/bin/bash#********************************##并发后台运行fun ##for wanggy 2012-01-25 ##note: ##fun_num fun函数后台运行次数 ##sql_num 每个函数sql运行次数 ##********************************##数据库...
# NOTE: To output the timing to a file use the following syntax: # 12_ways_to_parse.ksh file_to_process > output_file_name 2>&1 # The actual timing data is sent to standard error, file descriptor (2),...
/home/xyz note Notice ``` 这里,`$HOME`环境变量的值和`ls [nN]*`命令的输出结果都被包含在`TestString`变量中。 #### 二、标准输入/输出与重定向 在Linux中,标准输入、标准输出和标准错误是非常重要的概念,...
Shell脚本是Linux或Unix操作系统中用于自动化任务的文本文件,它包含了一系列的命令,可以按顺序执行。本文档是对Shell脚本编写的总结,涵盖了重定向、管道、变量、循环以及日志处理等多个关键概念。 1. **文件...
一个简单的shell脚本,用于管理您的随机每日笔记。 每次您运行note.sh它都会打开当天的Markdown文件。 例如,如果今天是2020年12月2日,它将在notes目录中创建一个名为2020-12-02.md的Markdown文件。 该脚本受到极...
1. 单引号 2. 双引号 3. 拼接字符串 4. 获取字符串长度 5. 提取子字符串 6. 查找子字符串
1. 数值测试 2. 字符串测试 3. 文件测试
@note:如果想要知道如何编执行脚本,请看我另一篇文章 如何执行shell脚本 如何编写一个shell脚本 脚本无法保存怎么办 一些个人的经历跟看法 编写sh脚本 首先我要说明一下,这个地方我用的是Mac系统,所以windows的...
1.1 显示普通字符串 1.2 显示转义字符 1.3 显示变量 1.4 显示换行 1.5 显示不换行 1.6 显示结果定向至文件 1.7 原样输出字符串,不进行
在Unix-like系统中,shell脚本或C程序的退出状态码是一个重要的通信方式,它用于指示程序执行的成功或失败情况。通常,一个程序的退出状态码是一个0到255之间的整数,其中0表示成功,非零值表示错误。在特定的上下...
下面的脚本提示输入1到4,与每一种模式进行匹配:echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'1) echo '你选择了 1'2)
~ 使用者家目录(文件名没事不要用这符号)$ 取用变量前导符& 命令后台工作/ 目录符号> 数据流导向,输出,“替换”>> 数据流导向,输出,“累加”数据流
综上所述,"MyNote"是一个综合性的个人学习资源库,涵盖了从基础编程语言(Python、Go、C++)到版本控制(Git)、开发工具(Vim、VSCode)、系统操作(Shell、Linux Shell)、通信技术(SIP、WebRTC)、容器化...