shell培训使用材料

来源:互联网 发布:阿里云幕布从哪里发货 编辑:程序博客网 时间:2024/04/20 00:45

注意事 

1, 区分引号、双引号和反引号“``”的作用

      $ echo '"$A"'        # 最外面的是引号

      "$A"                     为单引号使得内部所有的符号都不在代表特殊含

      $ echo "'$A'"        # 最外面的是双引号

      'B C'                     双引号使得引号失去了它的特殊含字符串被使用

 

2, 区分本地量、量和局部

    set

    export

    local     local.sh

 

3, 不同shell之互相

    father.sh

    child.sh

   遇到“XXX見つかりません” ,先想想字符方面的问题

   注意不要在代码缩进候使用全角空格,否使用全角空格缩进的全部无法正确解。程序出大面错误警告。XXX見つかりません

    注意字符集的问题,如果在本地编辑成后ksh,上后回符会变为特殊字符。但是在本地编辑成后sh,上后回符会被去掉。与FTP工具的配置有系。

 

字符串

= 两个字符串相等

= 两个字符串不等

-z 空串

-n 非空串

 

逻辑运算

-a 逻辑与,操作符两真,真,否则为

-o 逻辑或,操作符两边为真,真,否则为

! 逻辑否,条件假,

 

文件状

- d 目
- s 文件
度大于0、非空
- f 正
文件
- w 可写
- L 符号

- u 文件有s u i d位

- r 可

- x 可


 
-eq
相等。 
-ne
不相等。 
-gt
第一个数大于第二个数。 
-lt
第一个数小于第二个数。 
-le
第一个数小于等于第二个数。 
-ge
第一个数大于等于第二个数。 


^
只只匹配行首
$
只只匹配行尾
*
只一个字符后*,匹配0个或多个此字符
[ ]
只匹配[ ]内字符。可以是一个字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
/
只用来屏蔽一个元字符的特殊含。因s h e l l中一些元字符有
特殊含/可以使其失去有意
.
只匹配任意字符
p a t t e r n / { n / }
只用来匹配前面p a t t e r n次数。n次数
p a t t e r n / { n
/ } m 只含同上,但次数最少n
p a t t e r n / { n
m / } 只含同上,但p a t t e r n次数在nm

$ # 传递到脚本的参数个数
$ *
以一个字符串示所有向脚本传递的参数。与位置量不同,此选项参数可超9
$ $
脚本运行的当前I D
$ !
后台运行的最后一个程的I D
$ @
$ #相同,但是使用加引号,并在引号中返回个参数
$ -
s h e l l使用的当前选项,与s e t命令功能相同
$ ?
示最后命令的退出状0表示没有错误,其他任何表明有错误

 

day1

1, 找在当前目下,48内改动过的文件  
   find . -mtime 2  

2, 在当前目下,列出所有以w开头的文件的详细信息  
   ls -l w*  

3, 新建shell文件,ftp到AIX的个人目,使用chmod命令其添加  
   chmod u+x filename  
   默
情况下,有owner的限和Group的读权  
4, 默
情况下的,是多少?如何算得来?  
  
其添加Owner的可限,是多少?如何算?  
  
chmod 740 filename  
5,
找在/cics目下,以CIC开头的文件  
   find /cics -name "CIC*"

6, 回到上一次离的文件
   cd -

7, 看当前目下,Owner有、写、限,Group有读权限的文件
   find . -perm 740

 

day2
1,
VI示行号。置自动缩进       
  
: set nu       

2, 除光所在字符。除光所在行。       
   x       
   dd       

3, 在整篇文档中搜索匹配AAA的字符串       
   :/AAA       

4, 如何在VI中完成下述操作       
   将光
所在行出的所有包含 aa 的字符串中的 aa 替换为 bb
   :s/aa/bb/g
   将光
所在行出的所有 aa 替换为 bb, aa 单词
   :s//<aa/>/bb/g
   将文档中出
的所有包含 aa 的字符串中的 aa 替换为 bb
   :%s/aa/bb/g
   将从第12行到第23行的行首加入 # 字符
   :12,23s/^/#/
   将所有行尾多余的空格

   :%s= *$==

5, 完成程序:批量修改当前目下的文件后       
 #!/bin/ksh       
 # BatchModifyExt       
        
 for FNANDEXT in *       
 do       
   FN=`echo $FNANDEXT | cut -f 1 -d "."`       
   EXT=`echo $FNANDEXT | cut -f 2 -d "."`       
   if [ $EXT = $1 ]       
   then       
     echo "$FNANDEXT -> $FN.$2"       
     mv $FNANDEXT $FN.$2       
   fi       
 done      
       
6, 完成程序:以用
户输入的名字作文件名称。如果文件存在,则让户进个文件
 否
则创个文件      
 #!/bin/sh      
       
 echo "Please input user name"      
 read DIRECTORY      
       
 if [ -d $DIRECTORY ]      
 then      
   MYPATH=`pwd`      
   MYPATH=${MYPATH}/${DIRECTORY}      
   cd $MYPATH      
   pwd      
 else
   mkdir -p $DIRECTORY
 fi
注意
由于shell程序
,会返回启动时的路径
所以,从程序中可以看出在shell中,cd到文件
中。但是退出后,用的当前状并不是在用户输入的文件中。
一份VI总结,一份正表达式总结备查。(可以用人写好的)

 

day3

1. 入文件中取指定行的内容到出文件中。
#!/bin/sh 
#ReadSpecificLines 
入文件: text  (内容可以自己定)
出文件: temp 
if [ "$#" -lt 1 ]; then 
   echo "Usage $0 [FILE] "
   exit 1
fi 

echo "Enter the line you want to choose from:" 
read FROMLINE 

echo "Enter the line you want to choose to:" 
read TOLINE 
      
rm -f temp 
LINENUM=`echo "$TOLINE - $FROMLINE"`

x=1
# opens the file you want choose the line from
exec < $1

while read LINE # read from the file
do
if [ $x -gt $FROMLINE ]
then
    if [ $x -lt $TOLINE ]
    then
     #    printf "%s/n" "$LINE" >> temp
      echo $LINE >> temp
    fi
fi

x=`expr $x + 1`
done

使用例:
Enter the line you want to choose from: 
1
Enter the line you want to choose to:
4

$cat temp
line2
line3

 

day4

1. 完成和Windows Console命令“tree”功能相同的shell脚本。

不要求命令行参数

示效果:

/home/matthew/

|--src

|   |--asm

|   |   |-- hello.s

|   |   |-- shell.s

|   |   |--hello

|   |   |--shell

|   |--shell

|   |   |--tree.sh

|--xfce.tar.gz

|-- mbox

`

3 directories, 7 files

 

#!/bin/sh

#display directory tree structure

 

LSPROG="/bin/ls"

# COLOR DEFINE

# ============

#

DIR="/033[01;34m"

EXE="/033[01;32m"

DEV="/033[01;33m"

LNK="/033[01;36m"

ZIP="/033[01;31m"

SOCK="/033[01;35m"

NULL="/033[00m"

ROOT=${1:-.}

TRUE=0

FALSE=1

LAYERS=0

FILECOUNT=0

DIRCOUNT=0

# print_dash

# ==========

# Print the structure lines

#

print_dash()

{

local i=0

local num=$1

 

while [ $i -lt $num ]; do

  echo "|/c"

  for j in 1 2 3; do

    echo " /c"

  done

  i=`expr $i + 1`

done

echo "|-- /c"

}

# ispkg

# =====

# Test if the file is a package like:

# .gz .tar .tgz .tar.gz .zip .rar .rpm

# and etc.

#

ispkg()

{

local f=$1

local i

# Package extension list, you can add your coustom

# extensions in it.

#

local pkg__ext=".gz .tar .tgz .tar.gz .zip .rar .rpm"

# if the file's suffix contain any package extension

# then cut it.

for i in $pkg__ext; do

  f=${f%$i}

done

if [ "$f" != "$1" ]; then

  return $TRUE

else

  return $FALSE

fi

}

# mktree

# ======

# The main function, that print the

# dictionary structure in dos's tree

# command style. It's runs in nesting.

#

mktree()

{

local f

for f in `$LSPROG -1 $1 2> /dev/null`; do

  f=${f%/}

  f=${f##*/}

 

  # If dictionary then print it and enter

  # the nesting block.

  if [ -d $1/$f ]; then

    print_dash $LAYERS

    echo "${DIR}$f${NULL}"

    DIRCOUNT=`expr $DIRCOUNT + 1`

    LAYERS=`expr $LAYERS + 1`

    mktree $1/$f

  else

    print_dash $LAYERS

    # file is a symbol link

    if [ -L $1/$f ]; then

      echo "${LNK}$f${NULL}"

    # file is executable

    elif [ -x $1/$f ]; then

      echo "${EXE}$f${NULL}"

    # file is a device

    elif [ -c $1/$f -o -b $1/$f ]; then

      echo "${DEV}$f${NULL}"

    # file is a socket

    elif [ -S $1/$f ]; then

      echo "${SOCK}$f${NULL}"

    # file is a package

    elif `ispkg $f`; then

      echo "${ZIP}$f${NULL}"

    else

      echo "$f"

    fi

 

    FILECOUNT=`expr $FILECOUNT + 1`

  fi

done

LAYERS=`expr $LAYERS - 1`

}

echo $ROOT

mktree $ROOT

echo "/`"

echo "$DIRCOUNT directories, $FILECOUNT files"

 

day5-6

Table定

std

no      name    class_no

class

no      name

course

no      name

grade

grade_no        course_no       std_no  grade

 

查询

级课程平均分列表

1   2   3   4  

        1   XX      XX      XX      XX

        2   XX      XX      XX      XX

        3   XX      XX      XX      XX

 

学生成列表

1   2   3   4  

        学生1   XX      XX      XX      XX

        学生2   XX      XX      XX      XX

        学生3   XX      XX      XX      XX

        学生4   XX      XX      XX      XX

 

1       查询   

2          

3          

4       更新   

               

1.1     列表       

        1.1.1.1 学生列表

               

2.1     学生信息登   

2.2     信息登   

2.3     程登       

2.4     绩记       

               

3.1     学生信息   

3.2     信息   

3.3            

3.4     绩删       

               

4.1     学生信息更新   

4.2     信息更新   

4.3     程更新       

4.4     更新       

 

插入

学生信息登

        学生姓名        级编  学号,班号,程号,成

信息登    在建表时设加一

        名称

程登

        程名称

绩记

        学号    程号