Shell学习笔记1
Linux中变量
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
区别:@*
相同点:都是引用所有参数
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在12 3)则"*" 等价于 “12 3"(传递了一个参数);而“@" 等价于 "1""2" "$3"(传递了三个参数)。
================================================华丽的分隔线=========================================
Linux CentOS 永久设置别名Alias:在/etc/bashrc里添加alias语句。
================================================华丽的分隔线=========================================
Linux下批量Kill多个进程的方法:
ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
"ps - ef"是Red Hat 里查看所有进程的命令。这时检索出的进程将作为下一条命令“grep LOCAL=NO”的输入。
"ps aux"是CentOS里查看所有进程的命令。
"grep LOCAL=NO"的输出结果是,所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点。
"grep -v grep"是在列出的进程中去除含有关键字“grep”的进程。
"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9"中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该令。
"kill -9"会强行杀掉指定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
================================================华丽的分隔线=========================================
>清空文件并写入,>>追加写入。
================================================华丽的分隔线=========================================
管道命令和xargs的区别(经典解释):
管道是实现“将前面的标准输出作为后面的标准输入”
xargs是实现“将标准输入作为命令的参数”
================================================华丽的分隔线=========================================
rename JPG jpg *.JPG
================================================华丽的分隔线=========================================
#!/bin/bash
for f in `cat 1.txt`;do touch $f;done
echo `ls ./`
for l in `ls *.jpg`
do
mv $l `echo ${l%_sb*}.jpg`
done
echo `ls ./`
for l in `ls *.jpg`
do
mv $l `echo ${l/%jpg/JPG}`
done
echo `ls ./`
================================================华丽的分隔线=========================================
计算字符数三种方法:
char=`seq -s " " 100`
方法1:echo ${#char}
方法2:echo $char | wc -m
方法3:echo $(expr length "$char")
================================================华丽的分隔线=========================================
计算字符数三种方法速度的比较:
#!/bin/bash
char=`seq -s " " 100`
echo -e '\e[0;32m使用echo ${#char}方式的结果:\e[0m'
time for i in $(seq 1000);do count="echo ${#char}";done
echo -e '\e[0;32m使用echo $char | wc -m方式的结果:\e[0m'
time for i in $(seq 1000);do count="echo $char | wc -m";done
echo -e '\e[0;32m使用echo $(expr length "$char")方式的结果:\e[0m'
time for i in $(seq 1000);do count="echo $(expr length "$char")";done
================================================华丽的分隔线=========================================
更改提示符
export PS1='\e[36m[\u@\h \W\$]\e[0m' 写入/etc/bashrc文件中最后一行
================================================华丽的分隔线=========================================
删除当前目录下30天前的数据
find ./ -type f -mtime +30 -exec rm -rf {} \;
删除当前目录下30天前的数据
find ./ -name "*.sql.gz" -type f -mtime +30 -exec rm -rf {} \;