Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7113458
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2012-07-12 20:36:51

原文地址:shell详解 作者:tianwaitian666

1、通过传递参数变量调用数据库

while [ 1 ]
do
  if [ "$1" = "-u" ]
  then
      shift 1
      user=$1
  fi
 
  if [ "$1" = "-p" ]
  then
      shift 1
      password=$1
  fi
 
  if [ "$1" = "-i" ]
  then
      shift 1
      db=$1
  fi
 
  shift 1
  if [ $# -eq 0 ]
  then
      break
  fi
 
done
sqlplus $user/$password@$db </dev/null
spool /home/ap/ods/tmp/lgt/a.txt
select * from b_m_dd_para;
spool off
TMP







1、通过传递参数变量调用数据库

while [ 1 ]
do
  if [ "$1" = "-u" ]
  then
      shift 1
      user=$1
  fi
 
  if [ "$1" = "-p" ]
  then
      shift 1
      password=$1
  fi
 
  if [ "$1" = "-i" ]
  then
      shift 1
      db=$1
  fi
 
  shift 1
  if [ $# -eq 0 ]
  then
      break
  fi
 
done
sqlplus $user/$password@$db </dev/null
spool /home/ap/ods/tmp/lgt/a.txt
select * from b_m_dd_para;
spool off
TMP




1、变量赋值、打印
#!/bin/sh        #对变量赋值
a="hello word"  #打印a的变量
echo $a   
#变量和其他文件混淆,可以使用花括号来告诉shell我们要打印的是num变量
num=2
echo "this is the $numnd"
echo "this is the ${num}nd"

输出结果:
hello word
this is the
this is the 2nd

说明:
1、符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑完了,如果
要执行该脚本,还必须使其可执行
2、给变量赋值时"="号前后不能有空格,否则识别不了
3、后面使用的变量必须和前面的一致,区分大小写

============================================================================

=========================================================     
1、程序执行时从键盘读入一个文件名,然后创建这个文件
#!/bin/sh  
read reply   #提示用户输入,并将输入内容赋值给变量var
echo $reply   #打印reply的变量

echo "Creating The DIR $reply..."
mkdir $reply   #根据在屏幕上输入的字符串创建一个文件夹
echo "DONE! The DIR $reply Created."

输出结果:
在屏幕上输入 "aaa",在当前目录下创建一个aaa的文件目录

说明:1、执行命令后,输入参数后,程序才执行

============================================================================

=========================================================
3、查找当前目录下过去24小时内修改的文件,并以-zcvf打包成一个.tar.gz的压缩包
#!/bin/sh
tar -zcvf aaa.tar.gz `find . -mtime -1 -type f -print`

输出结果:
当前目录下出现一个aaa.tar.gz的压缩包

说明:
      1、find . -mtime -1 -type f -print --查找当前目录下过去24小时内修改的

文件
      2、find 后面的"."符号代表当前目录,也可以去掉或者用"./"代替
      3、在shell张执行命令时用"``"括起来,其他单引号和双引号都不认,这个字符

在按键ESC下的那个按键


============================================================================

=========================================================
4、if else 语句的使用
#!/bin/sh
echo $SHELL
if [ "$SHELL"="/bin/bash" ]
then
  echo "your login shell is the bash (bourne again shell)"
else
  echo "your login shell is not bash but $SHELL"
fi

输出结果:
your login shell is the bash (bourne again shell)

说明:
1、if后面不能和[]连到一块,另外if中的语句应保持有空格存在

============================================================================

=========================================================
4、&&和||的使用,该脚本首先判断mailfolder是否可读,如果可读则打印该文件中

的"step" 一行。如果不可读则或操作生效,打印错误信息后脚本退出
#!/bin/sh
mailfolder=/home/ap/ods/fhts_proc/bin/B410_B_S_DEP_SAE_ACCT_CLOSE_RUN.sh
[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1; }
[ -f "$mailfolder" ] && echo "This computer uses shadow passwors"
echo "$mailfolder has mail step:"
grep "^step" $mailfolder

输出结果:
This computer uses shadow passwors
/home/ap/ods/fhts_proc/bin/B410_B_S_DEP_SAE_ACCT_CLOSE_RUN.sh has mail step:
step=$4

说明:
1、[ -f "somefile" ] :判断是否是一个文件 
 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值   
 [ "$a" = "$b" ] :判断$a和b是否相等
 [ -r "$mailfolder" ] :判断$mailfolder是否可读
2、grep 字符串时"^"表示从每行第一个字符开始匹配,"$"表示从每行最后一个
字符开始匹配
3、exit 1; 表示退出脚本
 

============================================================================

=========================================================
5、case in使用,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件
   语法: case ... in
          ...) do something here ;;
          esac
------------------------------------------------------
#!/bin/bash
file=$1
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
    unzip $1;;
"$1: gzip compressed"*)
    gunzip $1;;
"$1: bzip2 compressed"*)
    bunzip2 "$file" ;;
*) echo "File $file can not be uncompressed with smartzip";;
esac

输出结果:根据输入的文件类型,解压文件

说明:
1、$1是一个特殊变量,该变量包含了传递给该程序的第一个参数值。也就是说
,当我们运行:sh a6.sh articles.zip ,$1 就是字符串 articles.zip
2、file "$1" 获得该文件的类型
3、如果出现command not found命令找不到,检查那一行是否有非法字符,重新
编写下


============================================================================

=========================================================
6、select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不
同的值中进行选择
   语法: select var in ... ; do
         break
          done

------------------------------------------------------
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
    break
done
echo "You have selected $var"
-----------------------------------------------------
输出结果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux

说明: 1、执行命令后输入一个编号,确定出信息

============================================================================

=========================================================
7、for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量


   语法: for var in ....; do
         ....
         done

------------------------------------------------------
#!/bin/bash
for var1 in "A B C"
do
  echo "aaa";
  echo "bbb $var1";
done

输出结果:
bbb A B C
============================================================================

=========================================================
8、引号 (单引号和双引号) 将防止这种通配符扩展:
------------------------------------------------------
#!/bin/bash
echo *.sh
echo "*.sh"
echo '*.sh'
echo $SHELL
echo "$SHELL"
echo '$SHELL'
echo \.sh
echo \$SHELL
--------------------------------------------------------------
输出结果:
a1.sh a2.sh a3.sh a4.sh a5.sh a6.sh a7.sh a8.sh
*.sh
*.sh
/bin/bash
/bin/bash
$SHELL
*.sh
$SHELL

说明:
 1、单引号和双引号都可防止通配符扩展,如echo "*.sh" 和 echo ‘*.sh’都

只打印出字符串值,不会执行命令。
     
2、单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展

但允许变量扩展。如: echo "$SHELL" 命令会执行,echo '$SHELL'不会执行
     
3、还有一种防止这种扩展的方法,那就是使用转义字符—反斜杆,在命令前加

上"\"

============================================================================

=========================================================
9、判断lgtq下的bb.txt文件是否存在,存在的话创建lgtqaaa文件夹,不存在的时候复
制aa.txt文件到lgtqaaa目录下。
#!/bin/bash
   echo "复制文件"
   fileName="lgtqaaa"     #变量的使用
                          #判断lgtq文件夹下的bb.txt是否存在
   if [ -e lgtq/bb.txt ]
   then
      echo "文件存在"
      mkdir $fileName
   else
     cp aa.txt $fileName/bb.txt
     echo "复制文件结束"
   fi
   exit

------
  #!/bin/bash
   echo "复制文件"
   fileName="lgtqba"
   if [ -f "lgtq/bb.txt" ]
   then
      echo "文件存在"
      mkdir $fileName
   else
     cp aa.txt $fileName/bb.txt
     echo "复制文件结束"
   fi
   exit
------

用if [ -e lgtq/bb.txt ] 和 if [ -f "lgtq/bb.txt" ]是同一个效果。
----------------判读一个文件夹是否存在----------------
  #!/bin/bash
   echo "复制文件"
   fileName="lgtqbca"
   if [ -d "lgtq" ]
   then
      echo "文件存在"
      mkdir $fileName
   else
     cp aa.txt $fileName/bb.txt
     echo "复制文件结束"
   fi
   exit
----------------判断一个文件是否存在还可用下面的&&表达式--
 [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
 
 #!bin.sh
[ -f "/home/ap/ods/gtli/lgtq/bb.txt" ] && echo "This computer uses shadow

passwors"
============================================================================

=========================================================










阅读(389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~