1、批量修改文件后缀
rename .out .exp *.out --所有.out均修改为.exp
2、判断是否输入参数,若未输入
if [ -z "$1" ];then
echo "Please input IP , for example 'test.sh master-vip'!"
exit 1
fi
3、批量去除行尾^M
sed -i 's/\r$//g' *
4、捕获ctrl+c
trap "echo -e \"\nCTRL+C exit !\n\";exit" INT
5、Linux SSH 远程登录后显示-bash-4.2$
可能的原因:
(1)没有给用户创建/home/username主目录
(2)用户没有/home/username主目录的读取权限
(3)主目录/home/username下面缺少shell环境
针对第3种解决办法:
cp /etc/skel/.bash* /home/xu
chown xu:xu /home/xu/.bash*
6、linux history命令带有时间
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S
7、批量替换字符串
sed -i "s/archivedir/sharedisk\/archivedir/g" */*
将当前目录下所有目录中的文件中的archivedir替换为sharedisk/archivedir
转义字符
sed -i "s#8888#\$PGPORT#g" *
8、shell除法
表达式和符号之间需要有空格
#!/bin/bash
export PGHOME=/home/highgo/hgdb/bin
export PGDATA=$PGHOME/data
export LD_LIBRARY_PATH=$PGHOME/lib
export PATH=$PGHOME/bin:$PATH
i=0
sum=0
avg=0
sql="
SELECT
CASE
WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0
ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
END
AS replication_lag;"
while [ $i -lt 10 ]
do
#echo -e `psql -t -A -c "$sql" -d highgo`
var=`psql -t -A -c "$sql" -d highgo`
#echo $var
sum=$(expr $sum + $var)
let i=$i+1
done
echo -e 'sum:'$sum
avg=$(expr $sum / $i)
echo -e 'avg:'$avg
9、查看某条命令结果变化
watch -n 60 -d -t pg_controldata
每1min查看一次命令,-d代表高亮显示变化,-t代表不显示最上方的时间
10、shell循环执行某条命令3分钟
#!/bin/bash
begin=`date +%s`
while true
do
end=`date +%s`
echo $begin
echo $end
diff=`echo "($end-$begin)"|bc`
echo $diff
if [ "$diff" -lt "180" ] ;then
echo 'a\n'
else
break
fi
done
11.查看存在默认字符串的所有文件名及行号
grep -rn "low" *
Shell脚本,简单function,执行
#!/bin/bash
function exesql {
a=“psql -c ‘$1’”
echo $a
}
exesql “select * from tb2”
结果打印出来的结果是
psql -c ‘select aa.sh from tb2’
解决办法:
echo "$a"才行,即如下:
#!/bin/bash
function exesql {
a="psql -c '$1'"
echo "$a"
}
exesql "select * from tb2"
返回结果为:
[postgres@localhost xu]$ sh aa.sh
psql -c 'select * from tb2'
原因:
echo $a也就是 echo select * from tb2,而*代表当前目录下的所有文件。
另,echo '$a'直接显示成$a
若a的值为执行结果的话,则脚本如下即可:
#!/bin/bash
function exesql {
a=`psql -c "$1"`
echo "$a"
}
exesql "select * from tb2"
返回结果为:
[postgres@localhost xu]$ sh aa.sh
i | t
---+-----
1 | aaa
2 | vvv
(2 rows)
12、top只显示postgres相关的进程
top c -p `pidof postgres| sed 's/ /,/g'`
13、中标麒麟系统删除过期提示
chmod 600 /usr/libexec/sysnotify
pkill -9 sysnotify
14、linux快捷方式文件存放地址
/root/.local/share/applications
桌面快捷方式文件放置于/usr/share/applications或者~/.local/share/applications处。前一个目录存储的桌面快捷方式每个用户都可以使用,而后一个目录则含有仅仅为特定用户创建的快捷方式。
15、扩容根目录
(1)扩容前
(2)fdisk /dev/sda
依次输入p、n、p、3
最后w保存更改
(3)执行命令partx -a /dev/sda # 刷新内核,可能需要执行多次,直到所有分区均完成加载,如下图所示,第一次只加载了3个分区,第二次全部加载完成,加载的数量要和上图中查询出的数量一致。
(4)扩充文件系统
16、centos快捷键启动终端Ctrl+Alt+t
17、xhost + 允许别的用户启动的图形程序将图形显示在当前屏幕上
18、如果ubuntu执行脚本时提示source:not found
ls -l /bin/sh结果如果为lrwxrwxrwx 1 root root 4 Jun 19 23:40 /bin/sh -> dash,这说明使用dash来解析脚本
运行:dpkg-reconfigure dash,在界面中选择no,改为bash解析脚本。
再次运行:ls -l /bin/sh
显示:lrwxrwxrwx 1 root root 4 Jun 20 01:04 /bin/sh -> bash
19、创建软连接
ln -s 源文件 目标文件
如ln -s /sdb/pg_wal /root/pg/data/
进入data目录查看
20、分割合并
cat hgdb-see-4.5.tar.gz.tar.00* >hgdb-see-4.5.tar.gz.tar
tar xf hgdb-see-4.5.tar.gz.tar
tar zxf hgdb-see-4.5.tar.gz
21、xshell ssh连接远程服务器,./执行程序,能弹出界面,但是无法点击?
解决办法:
(1)打开Xconfig
(2)双击Default Profile
(3)选择“设备”–“鼠标设置”
(4)将“同时单击向左按钮和向右按钮”的勾选去掉
(5)点击确定