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
; 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 ~]$ .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 ~]# *} |wc -L

在此基础上加1就可以了

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. Oracle碎碎念~2

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

  6. MySQL碎碎念

    1. 如何修改Mysql的用户密码 mysql> update mysql.user set password=password('hello') where user='root'; mysq ...

  7. Python碎碎念

    1. 如何添加路径 主要有以下两种方式: 1> 临时的 import sys sys.path.append('C:\Users\Victor\Desktop') 2> 永久的 在Linu ...

  8. Oracle碎碎念~1

    1. 设置SQL*Plus提示符 SQL> set sqlprompt "_user'@'_connect_identifier>" SYS@orcl> 为了对所 ...

  9. Android编译过程中的碎碎念

    刷机不是用rom包吗?怎么可以使用fastboot flashall -w将*.img文件刷入呢? 在Mac上面可以参考这篇文章进行刷机.概括来说解释从官方下载rom包,解压后运行./flash-al ...

随机推荐

  1. VS中如何快捷地给自己的代码添加创建信息注释

    VS中如何快捷地给自己的代码添加创建信息注释 Intro 以下讨论的都是没有使用 GIT 来管理源代码的情况,如果使用 GIT 管理源代码可直接使用VS的Git扩展就不需要考虑以下问题. 什么是创建信 ...

  2. tornado 学习笔记10 Web应用中模板(Template)的工作流程分析

             第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...

  3. java设计模式--简单工厂模式

     简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大 ...

  4. [Kerberos] How to Kerberize an Hadoop Cluster

    Overview Kerberos是一个第三方认证机制,用户和服务(known as principals)通过kerberos server (known as the Key Distributi ...

  5. [知识点]C++中的运算符

    1.前言 之前最开始学习语法和基础知识的时候,基本上最简单的运算符有所接触,当时对于位运算这种东西完全没有概念.今天对C++中出现的部分运算符尤其是位运算符进行一些总结. 2.+ - * / % 这些 ...

  6. &lt;META http-equiv=X-UA-Compatible content=IE=EmulateIE7&gt;

    未来兼容性中的 META 标记和锁定 注意:本文档是预备文档,随时可能变更. 对于 Web 开发人员来说,文本兼容性是一个要考虑的重要问题.Windows Internet Explorer 8 引入 ...

  7. DoubanFm之设计模式(一)

    前两版DoubanFm写的太戳,第一版可以忽略,当是熟悉WP手机的一些API.. 第二版用了比较多的依赖注入,熟悉了Messenger,过后越写越大,感觉不对,赶快打住..现在开始好好思考各模块了. ...

  8. As3 常用日期工具

    package com.lj.utils { import mx.controls.DateField; import mx.controls.dataGridClasses.DataGridColu ...

  9. TListView列表拒绝添加重复信息

      //TListView列表拒绝添加重复信息 procedure TForm1.Button1Click(Sender: TObject);var  i: Integer;begin  if (Tr ...

  10. MHA自动Failover过程解析(updated) 转

    允许转载, 转载时请以超链接形式标明文章原始出处和网站信息 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover ...