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=0
while read line
do
   a[$i]="$line"
   i=$[$i+1]
done < dept.txt
for (( i=0; i<3; 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 ~]$ ./1.sh   -->>注意执行的方式,如果是sh 1.sh则没有这种效果
+ word1=Hello
+ word2=World
+ echo Hello World
Hello World

   3> 只希望一部分显示执行过程,可使用set -x 和set +x

[oracle@node1 ~]$ cat 1.sh
#!/bin/bash
set -x
word1=Hello
word2=World
set +x
echo $word1 $word2
[oracle@node1
~]$ ./1.sh + word1=Hello + word2=World + set +x Hello World

10. > /dev/null 2>&1  

       将标准输出和标准错误重定向到/dev/null中

11. 数组

$ fruits[0]="Apple"
$ fruits[1]="Grape"
$ fruits[2]="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[@]}"   -->> 如何获取数组的个数
3
$ 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

    

    

你可能感兴趣的:(shell)