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碎碎念的更多相关文章

  1. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  2. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

  3. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  5. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  6. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  7. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  8. Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念

    算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...

  9. Oracle碎碎念~2

    1. 如何查看表的列名及类型 SQL> select column_name,data_type,data_length from all_tab_columns where owner='SC ...

随机推荐

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  3. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  4. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  5. 基于Vue2.0的单页面开发方案

    2016的最后一天,多多少少都应该总结一下这一年的得失,哪里做的好,哪里需要改进,记一笔,或许将来会用到呢. 毕业差不多半年了,一直是一个人在负责公司项目的前端开发与维护,当时公司希望前后端分离,提高 ...

  6. Supermap iCloudManager -负载均衡

    Supermap icm负载均衡理解: 应用场景:地图出图 子节点1和子节点2中的服务保持一致,一般情况下设置的是匿名用户通过nginx访问服务信息,所以不需要登录. 1.通过nginx分发请求,(轮 ...

  7. Android中Fragment的两种创建方式

    fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认 ...

  8. Linux 权限设置chmod

    Linux中设置权限,一般用chmod命令 1.介绍 权限设置chmod 功能:改变权限命令.常用参数: 1=x(执行权execute) 2=w(写权write) 4=r(读权Read) setuid ...

  9. 【一起学OpenFOAM】系列由来

    1 为什么要学习OpenFOAM 掐指算起来,接触CFD也差不多有十个年头了,其间一直使用的商用CFD软件,有Fluent.CFX.StarCCM+等,这些商用软件各有其优缺点,都能较好的解决常规的工 ...

  10. 【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持

    前言 在之前介绍的流量劫持文章里,曾提到一种『HTTPS 向下降级』的方案 -- 将页面中的 HTTPS 超链接全都替换成 HTTP 版本,让用户始终以明文的形式进行通信. 看到这,也许大家都会想到一 ...