|
大家好
这是一篇自己阅读、学习的shell编程,工作中大量应用,尤为awk、sed、grep为主。希望对大家速成有用
可以直接翻看到中部位置
【data】
export PATH=/mall/jdk/jdk1.7/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export LANG=zh_CN.GB18030
start=`date +%s -d "2011-11-28 15:55:37"`
end=`date +%s -d "2011-11-28 15:55:52"`
echo $(($end-$start))
date "+%Y-%m-%d %H:%M:%S"
date -d '+1 day' +"%d" 本日+1
date -s 20100405
date -s 14:31:00
1、上个月末
date -d `date +%y%m01`"-1 day" +%d
2、往前倒
date -d -`date +%d`day +%d
3、条件
if [`date +%d -d tomorrow` == 01 ];
4、上个月
date -d last-month
date -d -1month
date -d '-1 month' +"%m"
5、下个月
date -d next-month
date -d 1month
6、本月初
date -d 1`date +%B`
上个月初
date -d 1`date -d last-month +%B`
指定月份
day -d 1May
echo `date +%d` | xargs -I{} date -d '-{} day' +%Y%m%d Linux如何得到上月月末日期
sed -i "3s/.*/$table/g" conf/run.sql
table=t_sms_mt_log_`date +"%m"` 本月,然后月初1号还是统计上月
date -d '-1 day' +"%m" 本月,实实在在的本月
subject="每日验证码下发数量统计_`date -d '-1 day' +"%m%d"`"
select * from t_sys_user where user_code='duanzz';
update t_sys_user set terminal_id='13730000000' where user_code='duanzz';
set fileformat=unix
字符串的截取-替换
echo ${stringa:1} 从第二位一直往后所有
echo ${stringa:2:5} 从第三位往后一共截取5位
echo ${stringZ:(-4)} 从右到左开始截取
echo ${stringZ: -4} 从右到左开始截取,和上面效果一样
a=${stringa%%f} 去掉变量stringa后缀f。
echo ${stringZ/abc/xyz} 变量中字符串 abc被xyz替换
echo ${stringZ/#abc/XYZ} 用'XYZ'替换开头的'abc'.
echo ${stringZ/%abc/XYZ} 用'XYZ'替换结尾的'abc'.
you_id=${USER}-on-${HOSTNAME}
you_id=$USER\-on-$HOSTNAME
echo $you_id root-on-db1 效果一样。变量与字符串混合输出
val=${1##+(0)} # 使用局部变量, 匹配最长连续的一个或多个0.
引用:${backup_DIR}/$DATE
#备份的变量:
backup_dir=/home/mysql/mysql_bak
date=`date -d "+%Y%m%d %H:%M:%d"`
yes_time=`date -d yesterday "+%Y%m%d"`
mkdir -p /opt/chen$date\nailong chen20160608nailong
date -d "2 day ago" +"%Y-%m-%d" 昨天日期
date -d "1 week ago" +"%Y-%m-%d" 上周日期
date +%Y%m%d%h%M
单引号(' ')操作与双引号基本一样, 但是不允许引用变量, 因为$的特殊意义被关闭了. 在单引号中,
任何特殊字符都按照字面的意思进行解释, 除了'. 所以说单引号("全引用")是一种比双引号("部分引
用")更严格的引用方法.
'' 单引号屏蔽所有特殊字符
"" 双引号屏蔽部分特殊字符
【eval】
两次扫描
test.txt内容:hello shell world!
myfile="cat test.txt"
(1)echo $myfile #result:cat test.txt
(2)eval echo $myfile #result:hello shell world!
【echo】
echo -e 处理特殊字符,解释特殊字符。生效特殊字符
echo -n 不换行输出
echo -e "a\ndddd" //自动换行
echo $(ls -al)不换行 echo "$(ls -al)" 换行
bash$ echo hello\!
hello!
bash$ echo "hello\!"
hello\!
bash$ echo -e x\ty
xty
bash$ echo -e "x\ty"
x y
echo "chen" >> file :把chen内容追加到file文件中来,不覆盖
echo "chen" > file :覆盖了!!!
[A-Za-z0-9]
######################## (( ... ))结构可以用来计算并测试算术表达式的结果.
#!/bin/bash
((5 > 4))
echo $?
echo "Exit status of \"((5 > 4))\" is $?."
【从键盘输入-不止是read】
command /dev/null 2>&1
status=$?
echo $? #如果cp这个命令成功的话,输出0,不成功的话,输出1
:冒号在此是占位符,{str:=expr} 如果变量str不为空,${str:=expr}就等于str的值,若str为空,就把expr的值赋值给str
: >> target_file 如果这个文件之前并不存在, 那么就创建它
if [ $name="" ] 如果这个变量为空值
then : # 什么都不做,引出分支.
if [ ! -s 22.txt ] 如果22.txt这个文件为空
或者是 if [ -z 22.txt ]
[ $I -eq 1 ] && MIN=$MYRAND
if [ -s $name ] 如果这个变量为空
if [ -d $path ] 如果目录存在
if [ -s $path ] 如果目录存在
if [ -n "$1" ] # 测试是否有命令行参数(非空).
-a 文件存在 YES !
-f 这是一个一般文件
-d 这是一个目录
-b 这是一个快设备(软盘,硬盘,光驱等)
-c 这是一个字符设备(键盘,声卡等)
-p 这个文件是一个管道
-h 或者 -L 这是一个符号链接
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-O 你是否为文件拥有者
-G 文件group-id是否与你相同
f1 -nt f2 文件f1比文件f2新
f1 -ot f2 文件f1比文件f2旧
&&:and |:或者 !:非 command||comand ||:前者命令为真,后者才能执行,否则后者不执行
comand&&comand 前者为真,后者执行,前者为假,后者略过
sort:排序 wc:统计
cd /opt && ./1.txt :逐次执行的
【查找内存使用情况】
[root@db1 opt]# free -m|grep Mem|awk '{print "used\n----"};{print $3}'
used
----
985
【数值比较】
------------在 [ ] 中使用
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
------------在 (( )) 中使用
< >=
----------字符串比较 = ==
小于, 按照ASCII字符进行排序
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意" |
|
|