Shell碎碎念
1. 字符串如何大小写转换
str="This is a Bash Shell script."
1> tr方式
newstr=`tr '[A-Z]' '[a-z]' <<<"$str"`或者 newstr=$(echo $str |tr '[a-z]' '[A-Z]')
2> typeset
typeset -u VARIABLE (把VARIABLE的小写转换成大写)
typeset -l VARIABLE (把VARIABLE的大写转换成小写)
如:
[oracle@node3 ~]$ typeset -u str
[oracle@node3 ~]$ str="This is a Bash Shell script."
[oracle@node3 ~]$ echo $str
THIS IS A BASH SHELL SCRIPT.
2. 判断变量中是否包含某个字符串
str="this is a string"
[[ $str =~ "this" ]] && echo "\$str contains this"
3. 将文本文件的内容按行保存到数组中
#!/bin/bash
i=
while read line
do
a[$i]="$line"
i=$[$i+]
done < dept.txt
for (( i=; i<; i++ ))
do
echo "${a[$i]}"
done
注意:在这里就不要用 cat dept.txt |while read line了,因为管道的命令都是在子Shell中执行的,这意味着在子Shell中赋值的变量对父Shell是无效的。在本例中,该脚本无法读取赋给数组的值。
4. 昨天的日期
date -d "1 day ago" "+%Y-%m-%d"
date -d last-day +%Y-%m-%d
5. 指定日期的后一天
date -d "20150303 1 days" +%Y%m%d
6. awk将最后一行的每一列分行打印
awk 'END{for(i=1;i<=NF;i++){printf "%s\n",$i}}'
7. AWK去掉空格
1> sub(/^[[:blank:]]*/,"",变量) 是去掉变量左边的空白符
sub(/[[:blank:]]*$/,"",变量) 是去掉变量右边的空白符
gsub(/[[:blank:]]*/,"",变量) 是去掉变量中所有的空白符
譬如: echo " hello world " | awk '{gsub(/[[:blank:]]*/,"",$0);print "|" $0 "|"}'
|helloworld|
2> echo " hello world " | awk '{sub("^ *","");sub(" *$","");print "|" $0 "|"}'
|hello world|
8. shell中如何实现数值向上取整
a=1.1
echo $a|awk '{print int($a)==$a?$a:int($a+1)}'
9. 如何显示Shell脚本的执行过程
1> sh -x 1.sh
2>
#!/bin/bash -x
word1=Hello
word2=World
echo $word1 $word2
执行结果如下:
[oracle@node1 ~]$ ./.sh -->>注意执行的方式,如果是sh 1.sh则没有这种效果
+ word1=Hello
+ word2=World
+ echo Hello World
Hello World
3> 只希望一部分显示执行过程,可使用set -x 和set +x
[oracle@node1 ~]$ cat .sh
#!/bin/bash
set -x
word1=Hello
word2=World
set +x
echo $word1 $word2
[oracle@node1 ~]$ ./.sh
+ word1=Hello
+ word2=World
+ set +x
Hello World
10. > /dev/null 2>&1
将标准输出和标准错误重定向到/dev/null中
11. 数组
$ fruits[]="Apple"
$ fruits[]="Grape"
$ fruits[]="Orange"
$ echo "${fruits[0]} ${fruits[1]} ${fruits[2]}"
Apple Grape Orange
$ fruits=("Apple" "Grape" "Orange") -->> 如何对数组进行赋值
$ echo "${fruits[0]} ${fruits[1]} ${fruits[2]}"
Apple Grape Orange
$ echo "${#fruits[@]}" -->> 如何获取数组的个数 $ echo "${fruits[@]}" -->> 如何获取数组的值
Apple Grape Orange
12. 如何用grep去掉空格和注释
grep -Ev "^$|^#" db_install.rsp
13. 如何找出tkprof命令生成的outputfile中的select语句
awk 'BEGIN{i=0;j=0}{if($0~"select"){i=NR;j=NR;print "\t"}if($0~/^$/) j=NR;if(i==j) print $0 }' 1.txt
因为select语句没有写在一行,且select语句结束以后会有空行,所以解决的思路是打印select及select以下的行,直到空行。所以当碰到select语句的时候,将行值赋给i和j,当碰到空行时,将行数赋给j,这样j就发生了改变。判断是否打印所在行的值就看i和j是否相等。
这样打印出来的内容会有点难看,select和select语句之间没有空行,所以在碰到select的时候就打印一个空行。
注意:判断空行的写法/^$/,BEGIN{i=0;j=0}代表将i和j初始化为0,如果没有BEGIN语句,则处理每一行的时候i和j的值都会重置为0。
14. 在第三行行尾添加;号
sed -ie '3s/$/;/'
15. Shell中计算
num=$[$num+1]
注意中间不能有空格,不然会报以下错误
[root@mysql-slave1 ~]# num=
[root@mysql-slave1 ~]# num=$[$num+]
[root@mysql-slave1 ~]# echo $num [root@mysql-slave1 ~]# num =$[$num+]
-bash: num: command not found
[root@mysql-slave1 ~]# num = $[$num+]
-bash: num: command not found
16. 如何去掉字符串中的空白字符
# echo " aa bb ccc "| tr -d [:blank:]
aabbccc
17. 删除指定文件外的其它文件
ls |grep -v 2.sh |xargs rm -rf
18. 如何将每一行的数据拼凑成一行输出
awk 'BEGIN{T=""}{T=T","$1}END{print T}' host.txt
19. 如何删除一个变量中的空格和换行符
#!/bin/bash
output=" 678
"
echo $output
echo "$output"
output="$(echo "${output}" | sed -e 'N;s/[\n[[:space:]]]*//g')"
echo "$output"
执行结果如下:
20. 如何查看一个字符串左侧有多少个0
[root@localhost ~]# file='00012hello'
[root@localhost ~]# echo ${file%*} |wc -L
在此基础上加1就可以了
21. shell逻辑判断
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。
[ -z STRING ] “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。
[ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。
[ STRING1 != STRING2 ] 如果字符串不相等则为真。
[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。
[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。
[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.
Shell碎碎念的更多相关文章
- Linux碎碎念
在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...
- 一些关于Linux入侵应急响应的碎碎念
近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...
- 一个谷粉和3年的Google Reader重度使用者的碎碎念
2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...
- Jerry的碎碎念:SAPUI5, Angular, React和Vue
去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...
- 结对编程ending-我和洧洧的碎碎念
应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...
- C语言 · 分分钟的碎碎念
算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...
- 最近关于Qt学习的一点碎碎念
最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...
- Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念
算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...
- Oracle碎碎念~2
1. 如何查看表的列名及类型 SQL> select column_name,data_type,data_length from all_tab_columns where owner='SC ...
随机推荐
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 一看就懂的ReactJs入门教程-精华版
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- Angular企业级开发(1)-AngularJS简介
AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...
- Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架
SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.or ...
- QT内省机制、自定义Model、数据库
本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...
- 如何使用dos命令查看MySQL当前使用的数据库?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:
- SQL*Plus生成html文件
最近使用SQL*Plus命令生成html文件,遇到一些有意思的知识点,顺便记录一下,方便以后需要的时候而这些知识点又忘记而捉急.好记性不如烂笔头吗! 为什么要用SQL*Plus生成html文件? ...
- 关系型数据库与NoSQL数据库
关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...