1. 关于某个档名的『档桉类型』判断,如 test -e filename 表示存在否
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1FILE2 does not则为真。
exists and [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。
[ -z STRING ] “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。
[ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。
[ STRING1 != STRING2 ] 如果字符串不相等则为真。
[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。
[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。
 
2. 关于档桉的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外)
-r 侦测该档名是否存在且具有『可读』的权限?
-w 侦测该档名是否存在且具有『可写』的权限?
-x 侦测该档名是否存在且具有『可执行』的权限?
-u 侦测该档名是否存在且具有『SUID』的属性?
-g 侦测该档名是否存在且具有『SGID』的属性?
-k 侦测该档名是否存在且具有『Sticky bit』的属性?
-s 侦测该档名是否存在且为『非空白档桉』?

3. 两个档桉之间的比较,如: test file1 -nt file2
-nt (newer than)判断 file1 是否比 file2 新
-ot (older than)判断 file1 是否比 file2 旧
-ef 判断 file1 与 file2 是否为同一档桉,可用在判断 hard link 的判定上。 主要意义在判定,两个档桉是否均指向同一个 inode 哩!
4. 关于两个整数之间的判定,例如 test n1 -eq n2
-eq 两数值相等 (equal)
-ne 两数值不等 (not equal)
-gt n1 大于 n2 (greater than)
-lt n1 小于 n2 (less than)
-ge n1 大于等于 n2 (greater than or equal)
-le n1 小于等于 n2 (less than or equal)

5. 判定字串的资料
test -z string 判定字串是否为 0 ?若 string 为空字串,则为 true
test -n string 判定字串是否非为 0 ?若 string 为空字串,则为 false。
注: -n 亦可省略
test str1 = str2 判定 str1 是否等于 str2 ,若相等,则回传 true
test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false

6. 多重条件判定,例如: test -r filename -a -x filename
-a (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
-o (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
 
以上为转载
写了一个patch文件的脚本:
#!/bin/shell
filename[0]="graphics_k.c"
filename[1]="p_w_picpath_k.c"
filename[2]="pipeline_info_ctrl.c"
filename[3]="pipeline_op_ctrl.c"
filename[4]="pl_audio.c"
filename[5]="pl_audio.h"
filename[6]="pl_video.c"
filename[7]="pl_video.h"
filename[8]="pm_device.c"
filename[9]="pm_surface_internal.c"
filename[10]="pm_device.c"
filename[11]="vpmfb.c"
filename[12]="pipeline_manager.h"
filename[13]="pl_tuner.c"
filename[14]="pl_tuner.h"
filename[15]="pnx8400_a9_env.sh"
sourcefile_path[0]="$NXP_BASE_ROOT/target/src/sd/video/lnxDrv/comps/lnxtmvssIO/src"
sourcefile_path[1]="$NXP_BASE_ROOT/target/src/sd/video/lnxDrv/comps/lnxtmvssIO/src/"
sourcefile_path[2]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeline/src/"
sourcefile_path[3]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeline/src/"
sourcefile_path[4]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeAudio/src/"
sourcefile_path[5]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeAudio/inc/"
sourcefile_path[6]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeVideo/src/"
sourcefile_path[7]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeVideo/inc/"
sourcefile_path[8]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrVideoPres/src/"
sourcefile_path[9]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrVideoPres/src/"
sourcefile_path[10]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrVideoPres/src/"
sourcefile_path[11]="$NXP_BASE_ROOT/target/src/sd/celf/drivers/comps/vpmfbDrv/src/"
sourcefile_path[12]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeline/inc/"
sourcefile_path[13]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeTuner/src/"
sourcefile_path[14]="$NXP_BASE_ROOT/target/src/sd/pvr/drivers/comps/tmpvrPipeTuner/inc/"
sourcefile_path[15]="$NXP_BASE_ROOT/"
patchfile_path="$NXP_BASE_ROOT/../PATCH/"
backupfile_path="$NXP_BASE_ROOT/../PATCH/backup/"
#/bin/echo $sourcefile
#/bin/echo $pathchfile
#/bin/echo $backupfile
function overlay
{
    for (( i = 0; i < 16 ; i ++ ))
    do
    sourcefile=${sourcefile_path[$i]}${filename[$i]}
    pathchfile=$patchfile_path${filename[$i]}
    backupfile=$backupfile_path${filename[$i]}
    if [ -e $sourcefile ]
    then
    /bin/echo "$sourcefile file exit!"
        if [ -e $backupfile ]
        then
            /bin/echo "Backup file exit! Ignore it..."
        else
            /bin/echo "Backup file now..."
            cp -f $sourcefile $backupfile
        fi
        /bin/echo "Overlay file..."
        cp -f $pathchfile $sourcefile
    else
    /bin/echo "Source file not exit!Pls check the source path"
    fi
    done
}
function restore
{
    for (( i = 0; i < 16 ; i ++ ))
    do
    sourcefile=${sourcefile_path[$i]}${filename[$i]}
    pathchfile=$patchfile_path${filename[$i]}
    backupfile=$backupfile_path${filename[$i]}
    if [ -e $sourcefile ]
    then
    /bin/echo "$sourcefile file exit! restore it..."
        if [ -e $backupfile ]
        then
            /bin/echo "Restore file now..."
            cp -f $backupfile $sourcefile
            /bin/echo "delete backup file..."
            rm -f $backupfile
        else
            /bin/echo "Backup file missing,please check..."
        fi
    else
    /bin/echo "Source file not exit!Pls check the source path"
    fi
    done
}
if [ -z $NXP_BASE_ROOT ] ; then
/bin/echo "NXP_BASE_ROOT Missing,Please run setup.sh first!"
return
fi
/bin/echo "Huangpu application, overlay below files"
if [ x$1 == x ]
then
    /bin/echo "Overlay script for Huangpu application!"
    /bin/echo "Useage:"
    /bin/echo "patch overlay:    overlay the patch files and backup the source files"
    /bin/echo "patch restore:    restore the source files and delete all backup files"
    return
else
    case "$1" in
    overlay)
      /bin/echo "overlay"
      overlay
      ;;
    restore)
      /bin/echo "restore"
      restore
      ;;
    *)
      /bin/echo "Overlay script for Huangpu application!"
      /bin/echo "Useage:"
      /bin/echo "patch overlay:    overlay the patch files and backup the source files"
      /bin/echo "patch restore:    restore the source files and delete all backup files"
      ;;
  esac
fi
但是其实可以用一句话就实现以上的功能:
find -name "*.[ch]" -exec cp -rf {} ../../SRC/{} \;
 
7. 产生一个全0xFF, 0xA5, 0xAA 的文件
tr '\000' '\377' < /dev/zero| dd of=file_0xFF.bin  bs=2k count=1
tr '\000' '\245' < /dev/zero| dd of=file_0xA5.bin  bs=2k count=1
tr '\000' '\252' < /dev/zero| dd of=file_0xAA.bin  bs=2k count=1
对一个文件后面不足大小的地方填充0
cat uldr.bin /dev/zero | dd bs=1 count=64k > uldr_padded_64k.bin
 
8. Find 命令对找到文件执行多个操作
find -name abc.txt  -exec touch {} \; -exec ls -l {} \; -exec cat {} \;
 
9. Find 命令找两种以上的文件
find .  \( -name "makefile" -o  -name "*.patch" -o  -name "*.txt" \)

10. 同时操作部分相同的文件或目录

touch test{0,1,2}
rm -f test{0,1,2}
mkdir -p test_dir/abc{1,2,3}
rm -rf test_dir/abc{1,3}
 
11. echo 代替键盘输入
echo -e “\n\n\n”  三个回车
从   AC_MGMT 中摘录的echo 代替键盘输入的 片段
 18 useradd $AC_ID -g $GRP_ID -m && \
 19 echo -e "$AC_ID\n$AC_ID\n"|passwd  $AC_ID && \
 20 echo "Create Successfully."
 21 echo "Enabling Samba For $AC_ID..."
 22 echo -e "$AC_ID\n$AC_ID\n$AC_ID\n"|smbpasswd -s -a $AC_ID && \
 23 smbpasswd -e $AC_ID
 24 echo "Samba Account for $AC_ID Done."
 
12. 合并文件
cat  file1 file2 > file3
 
13. 找到所有ko并copy
cp $(find *.ko) to_dir
 
14. 暂停运行程序和恢复
CTRL-Z    暂停运行程序
jobs      查看当前任务列表
fg num    前台运行任务列表中 num 任务
bg num    后台运行任务列表中 num 任务
 
jacky@debian5:~$ ping 192.168.100.180
PING 192.168.100.180 (192.168.100.180) 56(84) bytes of data.
64 bytes from 192.168.100.180: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 192.168.100.180: icmp_seq=2 ttl=64 time=0.005 ms
64 bytes from 192.168.100.180: icmp_seq=3 ttl=64 time=0.004 ms
^Z
[1]+  Stopped                 ping 192.168.100.180
jacky@debian5:~$ jobs
[1]+  Stopped                 ping 192.168.100.180
jacky@debian5:~$ ping 192.168.100.28
PING 192.168.100.28 (192.168.100.28) 56(84) bytes of data.
64 bytes from 192.168.100.28: icmp_seq=1 ttl=128 time=1.85 ms
64 bytes from 192.168.100.28: icmp_seq=2 ttl=128 time=0.216 ms
64 bytes from 192.168.100.28: icmp_seq=3 ttl=128 time=0.374 ms
^Z
[2]+  Stopped                 ping 192.168.100.28
jacky@debian5:~$ jobs
[1]-  Stopped                 ping 192.168.100.180
[2]+  Stopped                 ping 192.168.100.28
jacky@debian5:~$
 
15. 无终端运行程序
a.  nohup  <command>
这样即便是shell被关闭,但是执行的命令仍然会继续执行。
b.  利用括号() 使进程成为 init(pid=1) 的子进程
    (ping 192.168.0.1 &)
你可以用 ps -ef  看到 进程PID 和父进程PPID的变化
 
16.sed -i 'xxx' file
将文件定位在xxx之前,然后你可以用echo换掉接下来的内容
 
17.如果你想在脚本文件中暂停
read -n1 -p "Press any key to continue..."