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 ...
随机推荐
- 【探索】在 JavaScript 中使用 C 程序
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- 使用cmake自动构建工程
公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...
- 设置tomcat远程debug
查看端口占用情况命令: netstat -tunlp |grep 8000 tomcat 启动远程debug: startup.sh 中的最后一行 exec "$PRGDIR"/& ...
- BPM体系文件管理解决方案分享
一.方案概述 企业管理在很大程度上是通过文件化的形式表现出来,体系文件管理是管理体系存在的基础和证据,是规范企业管理活动和全体人员行为,达到管理目标的管理依据.对与公司质量.环境.职业健康安全等体系有 ...
- 【从零开始学BPM,Day2】默认表单开发
[课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...
- hive
Hive Documentation https://cwiki.apache.org/confluence/display/Hive/Home 2016-12-22 14:52:41 ANTLR ...
- Spring MVC类型转换器
类型转换器引入 为什么页面上输入"12",可以赋值给Handler方法对应的参数?这是因为框架内部帮我们做了类型转换的工作.将String转换成int 但默认类型转换器并不是可以将 ...