shell字符串匹配
介绍下Shell中的KaTeX parse error: Expected 'EOF', got '#' at position 4: {}、#̲#和%%使用范例,本文给出了不…{ }分别替换得到不同的值:
${file#/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#.}:删掉第一个 . 及其左边的字符串:file.txt
${file##.}:删掉最后一个 . 及其左边的字符串:txt
${file%/}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/}:删掉第一个 / 及其右边的字符串:(空值)
${file%.}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt
https://blog.csdn.net/jiezi2016/article/details/79649382
获得脚本所在的目录
ROOT_DIR= ( c d " (cd " (cd"(dirname “ 0 " ) " ; p w d ) a p p r o o t d i r = " 0")"; pwd) approot_dir=" 0")";pwd)approotdir="{ROOT_DIR}”
if里面的或
if [ "${opt_type}" = "start" -o "${opt_type}" = "restart" -o "${opt_type}" = "stop" ]; then
echo "4444"
fi
-o 的意思是或
判断文件是否存在
if [ -f ${run_proc_name} ]; then #如果存在
rm ${run_proc_name}
fi
ln 链接
ln -f是软连接
https://www.runoob.com/note/29134
https://www.51cto.com/article/667057.html 很详细地介绍了什么是硬链接和软连接
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1 //f3是一个符号链接,比较虚的
export
https://blog.csdn.net/wudinaniya/article/details/106445078
一、linux脚本文件中export 变量的作用:
- export 用于声明一个环境变量: export variable=value
- 该环境变量只在本进程和其子进程中可以访问。
- 如果是在系统级的配置文件中,如 /etc/profile中 export 一个变量,那么这个变量就会在整个系统运行期间都起作用。即使新开shell会话连接甚至,重启了服务器仍可生效。
- 如果在用户级 ~/.bash_profile 之类的文件中,则每次启动shell都会去读这个文件,所以每次打开shell也是可以取到这个值的。
- 如果在某一次运行中,手动export一个变量,则只在这次shell的使用中,才能访问这个变量,或者在该shell启动的启动程序中,也是可以访问这个变量的,因为它们是这个shell的子进程。新开shell连接及重启服务器都会失效。
二. 用sorce设置动态链接库
https://codeantenna.com/a/scfZGSDXwk
在Linux下,如果自己写好一个动态链接库,需要在其他程序里调用,则需要让这些程序能找到这个动态链接库,如果设置的不对,就会出现类似的错误:
error while loading shared libraries: libmysqlclientso.so.0: cannot open shared object file: No such file or directory
这是因为没有把动态链接库的路径放到变量LD_LIBRARY_PATH里。
可以执行=shell命令:export LD_LIBRARY_PATH=自己的动态链接库路径:$LD_LIBRARY_PATH
以上做法,只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;如何把这个值持续写到 LD_LIBRARY_PATH 里呢?
启动程序
写好程序
#include<iostream>
using namespace std;
int main(){
cout<<"fffff"<<endl;
}
编译好,把可执行文件命名为main
g++ main.cpp -o main
写启动脚本
function PrintLog()
{
cur_dt=`date "+%Y-%m-%d %H:%M:%S"`
echo "[${cur_dt}]:$*"
}
function RunCmd()
{
PrintLog "$*"
$*
}
run_proc_name="/data/Liangjc/homework/main" #可执行文件的绝对路径
RunCmd ${run_proc_name}
执行脚本,并得到结果
$ sh test.sh
fffff