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。