Linux中shell文件操作大全

Linux中shell文件操作大全 2012-11-21 10:19:19

分类:

原文地址:Linux中shell文件操作大全 作者:fuliangcheng

1.创建文件夹
#!/bin/sh
mkdir -m 777 "%%1"

2.创建文件
#!/bin/sh
touch "%%1"

3.删除文件
#!/bin/sh
rm -if "%%1"

4.删除文件夹
#!/bin/sh
rm -rf "%%1"

5.删除一个目录下所有的文件夹
#!/bin/bash
direc="%%1" #$(pwd)
for dir2del in $direc/* ; do
if [ -d $dir2del ]; then
  rm -rf $dir2del
fi
done

6.清空文件夹
#!/bin/bash
direc="%%1" #$(pwd)
rm -if $direc/*
for dir2del in $direc/* ; do
if [ -d $dir2del ]; then
  rm -rf $dir2del
fi
done

7.读取文件
#!/bin/sh
7.1.操作系统默认编码
cat "%%1" | while read line; do
echo $line;
done

7.2.UTF-8编码
cat "%%1" | while read line; do
echo $line;
done

7.3.分块读取
cat "%%1" | while read line; do
echo $line;
done

8.写入文件
#!/bin/sh
cat > "%%1" << EOF
%%2
EOF

tee "%%1" > /dev/null << EOF
%%2
EOF

#sed -i '$a %%2' %%2

9.写入随机文件
#!/bin/sh
cat > "%%1" << EOF
%%2
EOF

tee "%%1" > /dev/null << EOF
%%2
EOF

#sed -i '$a %%2' %%2

10.读取文件属性
#!/bin/bash
file=%%1
file=${file:?'必须给出参数'}
if [ ! -e $file ]; then
    echo "$file 不存在"
    exit 1
fi
if [ -d $file ]; then
    echo "$file 是一个目录"
    if [ -x $file ]; then
        echo "可以"
    else
        echo "不可以"
    fi
    echo "对此进行搜索"  
elif [ -f $file ]; then
    echo "$file 是一个正规文件"
else
    echo "$file不是一个正规文件"
fi
if [ -O $file ]; then
    echo "你是$file的拥有者"
else
    echo "你不是$file的拥有者"
fi
if [ -r $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可读权限"
if [ -w $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可写权限"
if [ -x $file -a ! -d $file ]; then
    echo "你拥有对$file"
else
    echo "你并不拥有对$file"
fi
echo "可执行的权限"

11.写入文件属性
#!/bin/bash
#修改存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性,使用权限超级用户。
#一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。
chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录
  -R:递归处理所有的文件及子目录。
  -V:详细显示修改内容,并打印输出。
  -:失效属性。
  +:激活属性。
  = :指定属性。
  A:Atime,告诉系统不要修改对这个文件的最后访问时间。
  S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
  a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
  i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
  D:检查压缩文件中的错误。
  d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。
  C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
  S:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。
  u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。

12.枚举一个目录中的所有文件夹
#!/bin/bash
OLDIFS=$IFS
IFS=:
for path in $( find "%%1" -type d -printf "%p$IFS")
do
#"$path"
done
IFS=$OLDIFS

13.复制文件夹
#!/bin/sh
cp -rf "%%1" "%%2"

14.复制一个目录下所有的文件夹到另一个目录下
#!/bin/bash
direc="%%1" #$(pwd)
for dir2cp in $direc/* ; do
if [ -d $dir2cp ]; then
  cp $dir2cp "%%2"
fi
done

15.移动文件夹
#!/bin/sh
mv -rf "%%1" "%%2"

16.移动一个目录下所有的文件夹到另一个目录下
#!/bin/bash
direc="%%1" #$(pwd)
for dir2mv in $direc/* ; do
if [ -d $dir2mv ]; then
  mv $dir2mv "%%2"
fi
done

17.以一个文件夹的框架在另一个目录下创建文件夹和空文件
#!/bin/bash
direc="%%1" #$(pwd)
OLDIFS=$IFS
IFS=:
for path in $( find $direc -type d -printf "%p$IFS")
do
mkdir -p "%%2/${path:${#direc}+1}"
done
IFS=$OLDIFS
#cp -a "%%1" "%%2"

表达式 含义
${#string}
{#string}
1,取得字符串长度
string=abc12342341          //等号二边不要有空格
echo ${#string}             //结果11
expr length $string         //结果11
expr "$string" : ".*"       //结果11 分号二边要有空格,这里的:根match的用法差不多2,字符串所在位置
expr index $string '123'    //结果4 字符串对应的下标是从0开始的这个方法让我想起来了js的indexOf,各种语言对字符串的操作方法大方向都差不多,如果有语言基础的话,学习shell会很快的。
3,从字符串开头到子串的最大长度
expr match $string 'abc.*3' //结果9个人觉得这个函数的用处不大,为什么要从开头开始呢。
4,字符串截取
echo ${string:4}      //2342341  从第4位开始截取后面所有字符串
echo ${string:3:3}    //123      从第3位开始截取后面3位
echo ${string:3:6}    //123423   从第3位开始截取后面6位
echo ${string: -4}    //2341  :右边有空格   截取后4位
echo ${string:(-4)}   //2341  同上
expr substr $string 3 3   //123  从第3位开始截取后面3位上面的方法让我想起了,php的substr函数,后面截取的规则是一样的。
5,匹配显示内容
//例3中也有match和这里的match不同,上面显示的是匹配字符的长度,而下面的是匹配的内容
expr match $string '\([a-c]*[0-9]*\)'  //abc12342341
expr $string : '\([a-c]*[0-9]\)'       //abc1
expr $string : '.*\([0-9][0-9][0-9]\)' //341 显示括号中匹配的内容这里括号的用法,是不是根其他的括号用法有相似之处呢,
6,截取不匹配的内容
echo ${string#a*3}     //42341  从$string左边开始,去掉最短匹配子串
echo ${string#c*3}     //abc12342341  这样什么也没有匹配到
echo ${string#*c1*3}   //42341  从$string左边开始,去掉最短匹配子串
echo ${string##a*3}    //41     从$string左边开始,去掉最长匹配子串
echo ${string%3*1}     //abc12342  从$string右边开始,去掉最短匹配子串
echo ${string%%3*1}    //abc12     从$string右边开始,去掉最长匹配子串这里要注意,必须从字符串的第一个字符开始,或者从最后一个开始,
7,匹配并且替换
echo ${string/23/bb}   //abc1bb42341  替换一次
echo ${string//23/bb}  //abc1bb4bb41  双斜杠替换所有匹配
echo ${string/#abc/bb} //bb12342341   #以什么开头来匹配,根php中的^有点像
echo ${string/%41/bb}  //abc123423bb  %以什么结尾来匹配,根php中的$有点像

#!/bin/bash
direc=$(pwd)
for file in "$(direc)/*"
do
if [ "${file##*.}" = "sh" ]; then
xterm -e bash $file
elif [ "${file##*.}" = "bin" ]; then
xterm -e $file
elif [ "${file##*.}" = "run" ]; then
xterm -e $file
elif [ "${file##*.}" = "bundle" ]; then
xterm -e $file
elif [ "${file##*.}" = "pl" ]; then
xterm -e perl $file
elif [ "${file##*.}" = "class" ]; then
xterm -e java ${file%.*}
elif [ "${file##*.}" = "rpm" ]; then
xterm -e rpm -ivh $file
elif [ "${file##*.}" = "rb" ]; then
xterm -e ruby $file
elif [ "${file##*.}" = "py" ]; then
xterm -e python $file
elif [ "${file##*.}" = "jar" ]; then
xterm -e java -jar $file
fi
done
OLDIFS=$IFS
IFS=:
for path in $( find $direc -type d -printf "%p$IFS")
do
for file in `ls $path`
do
if [ "${file##*.}" = "sh" ]; then
xterm -e bash """"$path"/"$file""""
elif [ "${file##*.}" = "bin" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "run" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "bundle" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "pl" ]; then
xterm -e perl """"$path"/"$file""""
elif [ "${file##*.}" = "class" ]; then
xterm -e java """"$path"/"${file%.*}""""
elif [ "${file##*.}" = "rpm" ]; then
xterm -e rpm -ivh """"$path"/"$file""""
elif [ "${file##*.}" = "rb" ]; then
xterm -e ruby """"$path"/"$file""""
elif [ "${file##*.}" = "py" ]; then
xterm -e python """"$path"/"$file""""
elif [ "${file##*.}" = "jar" ]; then
xterm -e java -jar """"$path"/"$file""""
fi
done
done
IFS=$OLDIFS

18.复制文件
#!/bin/sh
cp %%1 %%2

19.复制一个目录下所有的文件到另一个目录
#!/bin/bash
direc="%%1" $(pwd)
for file in "$direc/*"
do
cp "$file" "%%1"
done

20.提取扩展名
#!/bin/sh
%%2=${%%1##.}

21.提取文件名
#!/bin/sh
%%2="$(basename %%1)"

22.提取文件路径
#!/bin/sh
%%2="$(dirname %%1)"

23.替换扩展名
#!/bin/sh
%%3="$(basename %%1)$%%2"

24.追加路径
#!/bin/sh
%%3="$(dirname %%1)/$%%2"

25.移动文件
#!/bin/sh
mv "%%1" "%%2"

26.移动一个目录下所有文件到另一个目录
#!/bin/bash
direc="%%1" #$(pwd)
OLDIFS=$IFS
IFS=:
for file in "$(direc)/*"
do
mv "$file" "%%1"
done
IFS=$OLDIFS

27.指定目录下搜索文件
#!/bin/sh
find -name "%%1"

28.打开文件对话框
#!/bin/sh
%%1="$(Xdialog --fselect '~/' 0 0 2>&1)"

29.文件分割
#!/bin/sh
split -b 2k "%%1"

while read f1 f2 f3
do
    echo $f1 >> f1
    echo $f2 >> f2
    echo $f3 >> f3
done


#!/bin/bash
  linenum=`wc   -l   httperr8007.log|   awk   '{print   $1}'`  
  n1=1  
  file=1  
  while   [   $n1   -lt   $linenum   ]  
  do  
                  n2=`expr   $n1   +   999`  
                  sed   -n   "${n1},   ${n2}p"   httperr8007.log >   file_$file.log    
                  n1=`expr   $n2   +   1`  
                  file=`expr   $file   +   1`  
  done  




其中httperr8007.log为你想分割的大文件,file_$file.log  为分割后的文件,最后为file_1.log,file_2.log,file_3.log……,分割完后的每个文件只有1000行(参数可以自己设置)

split 参数:
-b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l  :以行数来进行分割;



#按每个文件1000行来分割除

split -l 1000 httperr8007.log httperr

httpaa,httpab,httpac ........

#按照每个文件100K来分割

split -b 100k httperr8007.log http

httpaa,httpab,httpac ........

#!/bin/bash
if [ $# -ne 2 ]; then
echo 'Usage: split file size(in bytes)'
exit
fi

file=$1
size=$2

if [ ! -f $file ]; then
echo "$file doesn't exist"
exit
fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'`
echo filesize: $filesize

let pieces=$filesize/$size
let remain=$filesize-$pieces*$size
if [ $remain -gt 0 ]; then
let pieces=$pieces+1
fi
echo pieces: $pieces

i=0
while [ $i -lt $pieces ];
do
echo split: $file.$i:
dd if=$file of=$file.$i bs=$size count=1 skip=$i
let i=$i+1
done

echo "#!/bin/bash" > merge

echo "i=0" >> merge
echo "while [ $i -lt $pieces ];" >> merge
echo "do" >> merge
echo " echo merge: $file.$i" >> merge
echo " if [ ! -f $file.$i ]; then" >> merge
echo " echo merge: $file.$i missed" >> merge
echo " rm -f $file.merged" >> merge
echo " exit" >> merge
echo " fi" >> merge
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge
echo " let i=$i+1" >> merge
echo "done" >> merge
chmod u+x merge'

30.文件合并
#!/bin/sh
cp "%%1"+"%%2" "%%3"

exec 3 exec 4 while read f1 <&3 && read f2 <&4
do
    echo $f1 $f2 >> join.txt
done

#!/bin/bash
if [ $# -ne 2 ]; then
echo 'Usage: split file size(in bytes)'
exit
fi

file=$1
size=$2

if [ ! -f $file ]; then
echo "$file doesn't exist"
exit
fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'`
echo filesize: $filesize

let pieces=$filesize/$size
let remain=$filesize-$pieces*$size
if [ $remain -gt 0 ]; then
let pieces=$pieces+1
fi
echo pieces: $pieces

i=0
while [ $i -lt $pieces ];
do
echo split: $file.$i:
dd if=$file of=$file.$i bs=$size count=1 skip=$i
let i=$i+1
done

echo "#!/bin/bash" > merge

echo "i=0" >> merge
echo "while [ $i -lt $pieces ];" >> merge
echo "do" >> merge
echo " echo merge: $file.$i" >> merge
echo " if [ ! -f $file.$i ]; then" >> merge
echo " echo merge: $file.$i missed" >> merge
echo " rm -f $file.merged" >> merge
echo " exit" >> merge
echo " fi" >> merge
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge
echo " let i=$i+1" >> merge
echo "done" >> merge
chmod u+x merge'

31.文件简单加密
#!/bin/bash
#make test && make strings && sudo make install
shc -r -f %%1.sh
#%%1.x
#%%1.x.c

32.文件简单解密
#!/bin/bash
#make test && make strings && sudo make install
shc -r -f %%1.sh
#%%1.x
#%%1.x.c

33.读取ini文件属性
#!/bin/bash
if [ "$%%3" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   p
   }" $1
elif [ "$%%4" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   s/^[ |        ]*$%%3[ | ]*=[ |   ]*\(.*\)[ |     ]*/\1/p
   }" $1
else
       if [ "$%%4" = "#" ];then
            sed "/\[$%%2\]/,/\[.*\]/{
            s/^[ |        ]*$%%3[ |    ]*=.*/ /
            }p" $1 > /tmp/sed$$
            mv /tmp/sed$$ $1
       else
            sed "/\[$2\]/,/\[.*\]/{
            s/^[ |        ]*$%%3[ |    ]*=.*/$%%3=$%%4/
            }p" $1 > /tmp/sed$$
            mv /tmp/sed$$ $%%1
       fi
fi

34.合并一个文件下所有的文件
#!/bin/sh
cat $(ls |grep -E '%%1\.') > %%1

#!/bin/bash
OLDIFS=$IFS
IFS=:
for path in $( find %%1 -type d -printf "%p$IFS")
do
for file in $path/*.c $path/*.cpp
do
if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then
#"$(path)/$(file)"
fi
done
done
IFS=$OLDIFS

#!/bin/bash
cat <<'EOF'> combine.c
#include
int main()
{
FILE *f1,*f2,*f3;
f1=fopen("a1.txt","r");
f2=fopen("a2.txt","r");
f3=fopen("a3.txt","w");
int a,b;
a=getw(f1);   /*从a1.txt和a2.txt中分别取最小的数a和b*/
b=getw(f2);
while(!feof(f1)&&!feof(f2))  /*两个文件都没结束时,执行循环、比较*/
{
if(a<=b)
{
putw(a,f3);
a=getw(f1);
}
else
{putw(b,f3);
b=getw(f2);
}
   }
if(feof(f1))  /*文件a1.txt结束时,把a2.txt中的数全部输入a3.txt*/
{putw(b,f3);
while((b=getw(f2))!=EOF)
putw(b,f3);
}
if(feof(f2))   /*同上*/
{
putw(a,f3);
while((a=getw(f1))!=EOF)
putw(a,f3);
}
fclose(f1);
fclose(f2);
fclose(f3);
printf("已完成!");
return 0;
}
EOF
gcc -o combine combine.c
if [ $? -eq 0 ]; then
./combine
else
echo 'Compile ERROR'
fi

35.写入ini文件属性
#!/bin/bash
if [ "$%%3" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   p
   }" $1
elif [ "$%%4" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   s/^[ |        ]*$%%3[ | ]*=[ |   ]*\(.*\)[ |     ]*/\1/p
   }" $1
else
       if [ "$%%4" = "#" ];then
            sed "/\[$%%2\]/,/\[.*\]/{
            s/^[ |        ]*$%%3[ |    ]*=.*/ /
            }p" $1 > /tmp/sed$$
            mv /tmp/sed$$ $%%1
       else
            sed "/\[$%%2\]/,/\[.*\]/{
            s/^[ |        ]*$%%3[ |    ]*=.*/$%%3=$%%4/
            }p" $1 > /tmp/sed$$
            mv /tmp/sed$$ $%%1
       fi
fi

36.获得当前路径
#!/bin/sh
%%1=$(pwd)

37.读取XML数据库

如何通过shell命令行读取xml文件中某个属性所对应的值?
例如:
BuildVersion 5
我希望能够通过Unix shell命令对属性键的名称BuildVersion进行查询,返回的结果是5,如何实现呀?
#!/bin/bash
grep BuildVersion|sed 's/.*<.*>\([^<].*\)<.*>.*/\1/'

结果返回的是“BuildVersion”,而不是“5”,如果要查询BuildVersion自动返回数值5应当如何写?

应该没错的。试一下: echo "BuildVersion 5"|grep BuildVersion|sed 's/.*<.*>\([^<].*\)<.*>.*/\1/'我在SL的终端里试,返回值是5

目前需要从xml文件提取数据,想做一个xmlparser.sh
xml 类似这样

  



希望输入 xmlparser.sh a.xml hostip可以返回192.168.0.1


#!/bin/sh

if [ $# -ne 2 ];then
   echo "Usage: $0 "
   exit 0
fi

grep $2 $1|awk '{print $2}'|grep -o "[0-9.]*"



grep $2 $1|awk '{print $2}'|grep -o "[0-9.]*"
改成
grep $2 $1|awk '{print $2}'|grep -Eo "[0-9.]+"
楼上这个有问题,如果我要得到的是

  

中的sharename,那么,呵呵,就错了

我觉得应该先定位到第二个参数“$2”的位置,然后再提取“=”后面的内容

这里有个完整的实现:
Parse Simple XML Files using Bash – Extract Name Value Pairs and Attributes
http://www.humbug.in/2010/parse-simple-xml-files-using-bash-extract-name-value-pairs-and-attributes/


不过需要安装xmllint.

设计到对多个xml文件进行element的读取和列表。有人做过么?
举个例子,
多个xml文件里面都有

        xxx</titlel><br> </article><br><br> 通过shell读取,然后合并到一起,再生成一个新的xml,但是其他元素不变。<br> <article><br>         <title>aaa</titlel><br> </article><br> <article><br>         <title>bbb</titlel><br> </article><br><br> 如果格式异常简单,没有特例,那么可以用shell实现<br> 如果有可能格式复杂,因为shell的命令所使用的正则表达式都不支持跨行匹配,所以用shell来解决这个问题就绕圈子了。<br> 用perl来作这个工作最直接、简单。perl的XML:DOM模块是专门处理XML文件的。<br><br> 偶倒是觉得,用PHP写Scripts也很方便,功能强大,而且,跨平台,<br><br> #!/bin/sh<br><br><br><br> sed -n '/<article>/{<br><br> N;<br><br> /\n[[:space:]]*<title>/{<br><br>     N;<br><br>     /<article>.*<\/article>/p<br><br>     }<br><br> D;<br><br> n<br><br> }'<br><br><br> 这小段代码能把一个xml文件中,你要的东西拿出来.<br> 你可以用for file in $*把这些信息都>>tmpfile中.<br> 然后用sed 在指定文件的指定位置用r命令把tmpfile粘贴进来~~~~<br><br> 大思路如此^_^  我想有这个东西(只要能正确的跑出结果)后面就不难了吧...<br><br> Name<br> xmllint — command line XML tool<br><br> Synopsis<br> xmllint [[--version] | [--debug] | [--shell] | [--debugent] | [--copy] | [--recover] | [--noent] | [--noout] | [--nonet] | [--htmlout] | [--nowrap] | [--valid] | [--postvalid] | [--dtdvalid URL] | [--dtdvalidfpi FPI] | [--timing] | [--output file] | [--repeat] | [--insert] | [--compress] | [--html] | [--xmlout] | [--push] | [--memory] | [--maxmem nbbytes] | [--nowarning] | [--noblanks] | [--nocdata] | [--format] | [--encode encoding] | [--dropdtd] | [--nsclean] | [--testIO] | [--catalogs] | [--nocatalogs] | [--auto] | [--xinclude] | [--noxincludenode] | [--loaddtd] | [--dtdattr] | [--stream] | [--walker] | [--pattern patternvalue] | [--chkregister] | [--relaxng] | [--schema] | [--c14n]] [xmlfile]<br><br> Introduction<br> The xmllint program parses one or more XML files, specified on the command line as xmlfile. It prints various types of output, depending upon the options selected. It is useful for detecting errors both in XML code and in the XML parser itself.<br><br> It is included in libxml2.<br><br> Options<br> --version<br> Display the version of libxml2 used.<br> --debug<br> Parse a file and output an annotated tree of the in-memory version of the document.<br> --shell<br> Run a navigating shell. Details on available commands in shell mode are below.<br> --debugent<br> Debug the entities defined in the document.<br> --copy<br> Test the internal copy implementation.<br> --recover<br> Output any parsable portions of an invalid document.<br> --noent<br> Substitute entity values for entity references. By default, xmllint leaves entity references in place.<br> --nocdata<br> Substitute CDATA section by equivalent text nodes.<br> --nsclean<br> Remove redundant namespace declarations.<br> --noout<br> Suppress output. By default, xmllint outputs the result tree.<br> --htmlout<br> Output results as an HTML file. This causes xmllint to output the necessary HTML tags surrounding the result tree output so the results can be displayed in a browser.<br> --nowrap<br> Do not output HTML doc wrapper.<br> --valid<br> Determine if the document is a valid instance of the included Document Type Definition (DTD). A DTD to be validated against also can be specified at the command line using the --dtdvalid option. By default, xmllint also checks to determine if the document is well-formed.<br> --postvalid<br> Validate after parsing is completed.<br> --dtdvalid URL<br> Use the DTD specified by URL for validation.<br> --dtdvalidfpi FPI<br> Use the DTD specified by the Public Identifier FPI for validation, note that this will require a Catalog exporting that Public Identifier to work.<br> --timing<br> Output information about the time it takes xmllint to perform the various steps.<br> --output file<br> Define a file path where xmllint will save the result of parsing. Usually the programs build a tree and save it on stdout, with this option the result XML instance will be saved onto a file.<br> --repeat<br> Repeat 100 times, for timing or profiling.<br> --insert<br> Test for valid insertions.<br> --compress<br> Turn on gzip compression of output.<br> --html<br> Use the HTML parser.<br> --xmlout<br> Used in conjunction with --html. Usually when HTML is parsed the document is saved with the HTML serializer, but with this option the resulting document is saved with the XML serializer. This is primarily used to generate XHTML from HTML input.<br> --push<br> Use the push mode of the parser.<br> --memory<br> Parse from memory.<br> --maxmem nnbytes<br> Test the parser memory support. nnbytes is the maximum number of bytes the library is allowed to allocate. This can also be used to make sure batch processing of XML files will not exhaust the virtual memory of the server running them.<br> --nowarning<br> Do not emit warnings from the parser and/or validator.<br> --noblanks<br> Drop ignorable blank spaces.<br> --format<br> Reformat and reindent the output. The $XMLLINT_INDENT environment variable controls the indentation (default value is two spaces " ").<br> --testIO<br> Test user input/output support.<br> --encode encoding<br> Output in the given encoding.<br> --catalogs<br> Use the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog is used by default.<br> --nocatalogs<br> Do not use any catalogs.<br> --auto<br> Generate a small document for testing purposes.<br> --xinclude<br> Do XInclude processing.<br> --noxincludenode<br> Do XInclude processing but do not generate XInclude start and end nodes.<br> --loaddtd<br> Fetch external DTD.<br> --dtdattr<br> Fetch external DTD and populate the tree with inherited attributes.<br> --dropdtd<br> Remove DTD from output.<br> --stream<br> Use streaming API - useful when used in combination with --relaxng or --valid options for validation of files that are too large to be held in memory.<br> --walker<br> Test the walker module, which is a reader interface but for a document tree, instead of using the reader API on an unparsed document it works on a existing in-memory tree. Used in debugging.<br> --chkregister<br> Turn on node registration. Useful for developers testing libxml2 node tracking code.<br> --pattern patternvalue<br> Used to exercise the pattern recognition engine, which can be used with the reader interface to the parser. It allows to select some nodes in the document based on an XPath (subset) expression. Used for debugging.<br> --relaxng schema<br> Use RelaxNG file named schema for validation.<br> --schema schema<br> Use a W3C XML Schema file named schema for validation.<br> --c14n<br> Use the W3C XML Canonicalisation (C14N) to serialize the result of parsing to stdout. It keeps comments in the result.<br> Shell<br> xmllint offers an interactive shell mode invoked with the --shell command. Available commands in shell mode include:<br><br> base<br> display XML base of the node<br> bye<br> leave shell<br> cat node<br> Display node if given or current node.<br> cd path<br> Change the current node to path (if given and unique) or root if no argument given.<br> dir path<br> Dumps information about the node (namespace, attributes, content).<br> du path<br> Show the structure of the subtree under path or the current node.<br> exit<br> Leave the shell.<br> help<br> Show this help.<br> free<br> Display memory usage.<br> load name<br> Load a new document with the given name.<br> ls path<br> List contents of path (if given) or the current directory.<br> pwd<br> Display the path to the current node.<br> quit<br> Leave the shell.<br> save name<br> Saves the current document to name if given or to the original name.<br> validate<br> Check the document for error.<br> write name<br> Write the current node to the given filename.<br> Catalogs<br> Catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the XML_CATALOG_FILES environment variable to a list of catalogs. An empty one should deactivate loading the default /etc/xml/catalog default catalog.<br><br> Debugging Catalogs<br> Setting the environment variable XML_DEBUG_CATALOG using the command "export XML_DEBUG_CATALOG=" outputs debugging information related to catalog operations.<br><br> Error Return Codes<br> On the completion of execution, Xmllint returns the following error codes:<br><br> 0<br> No error<br> 1<br> Unclassified<br> 2<br> Error in DTD<br> 3<br> Validation error<br> 4<br> Validation error<br> 5<br> Error in schema compilation<br> 6<br> Error writing output<br> 7<br> Error in pattern (generated when [--pattern] option is used)<br> 8<br> Error in Reader registration (generated when [--chkregister] option is used)<br> 9<br> Out of memory error<br><br> Parse Simple XML Files using Bash – Extract Name Value Pairs and Attributes<br><br><br> 2 Comments<br> 1<br> Tweet<br><br><br><br><br> Pratik Sinha | July 31, 2010<br><br><br> I have written up a simple routine par***ML to parse simple XML files to extract unique name values pairs and their attributes. The script extracts all xml tags of the format <abc arg1="hello">xyz</abc> and dynamically creates bash variables which hold values of the attributes as well as the elements. This is a good solution, if you don’t wish to use xpath for some simple xml files. However you will need xmllint installed on your system to use the script. Here’s a sample script which uses the par***ML function<br> #!/bin/bash<br> xmlFile=$1<br><br> function par***ML() {<br>   elemList=( $(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep -e "</.*>$" | while read line; do \<br>     echo $line | sed -e 's/^.*<\///' | cut -d '>' -f 1; \<br>   done) )<br><br>   totalNoOfTags=${#elemList[@]}; ((totalNoOfTags--))<br>   suffix=$(echo ${elemList[$totalNoOfTags]} | tr -d '</>')<br>   suffix="${suffix}_"<br><br>   for (( i = 0 ; i < ${#elemList[@]} ; i++ )); do<br>     elem=${elemList[$i]}<br>     elemLine=$(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "</$elem>")<br>     echo $elemLine | grep -e "^</[^ ]*>$" 1>/dev/null 2>&1<br>     if [ "0" = "$?" ]; then<br>       continue<br>     fi<br>     elemVal=$(echo $elemLine | tr '\011' '\040'| sed -e 's/^[ ]*//' -e 's/^<.*>\([^<].*\)<.*>$/\1/' | sed -e 's/^[ ]*//' | sed -e 's/[ ]*$//')<br>     xmlElem="${suffix}$(echo $elem | sed 's/-/_/g')"<br>     eval ${xmlElem}=`echo -ne \""${elemVal}"\"`<br>     attrList=($(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "</$elem>" | tr '\011' '\040' | sed -e 's/^[ ]*//' | cut -d '>' -f 1  | sed -e 's/^<[^ ]*//' | tr "'" '"' | tr '"' '\n'  | tr '=' '\n' | sed -e 's/^[ ]*//' | sed '/^$/d' | tr '\011' '\040' | tr ' ' '>'))<br>     for (( j = 0 ; j < ${#attrList[@]} ; j++ )); do<br>       attr=${attrList[$j]}<br>       ((j++))<br>       attrVal=$(echo ${attrList[$j]} | tr '>' ' ')<br>       attrName=`echo -ne ${xmlElem}_${attr}`<br>       eval ${attrName}=`echo -ne \""${attrVal}"\"`<br>     done<br>   done<br> }<br><br> par***ML<br> echo "$status_xyz |  $status_abc |  $status_pqr" #Variables for each  XML ELement<br> echo "$status_xyz_arg1 |  $status_abc_arg2 |  $status_pqr_arg3 | $status_pqr_arg4" #Variables for each XML Attribute<br> echo ""<br><br> #All the variables that were produced by the par***ML function<br> set | /bin/grep -e "^$suffix"<br><br> The XML File used for the above script example is:<br> <?xml version="1.0"?><br> <status><br>   <xyz arg1="1"> a </xyz><br>   <abc arg2="2"> p </abc><br>   <pqr arg3="3" arg4="a phrase"> x </pqr><br> </status><br><br><br> The root tag, which in this case is “status”, is used as a suffix for all variables. Once the XML file is passed to the function, it dynamically creates the variables $status_xyz, $status_abc, $status_pqr, $status_xyz_arg1, $status_abc_arg2, $status_pqr_arg3 and $status_pqr_arg4.<br><br> The output when the script is ran with the xml file as an argument is<br> @$ bash  par***ML.sh test.xml<br> a |  p |  x<br> 1 |  2 |  3 | a phrase<br><br> status_abc=p<br> status_abc_arg2=2<br> status_pqr=x<br> status_pqr_arg3=3<br> status_pqr_arg4='a phrase'<br> status_xyz=a<br> status_xyz_arg1=1<br><br> This script won’t work for XML files like the one below with duplicate element names.<br> <?xml version="1.0"?><br> <status><br>   <test arg1="1"> a </test><br>   <test arg2="2"> p </test><br>   <test arg3="3" arg4="a phrase"> x </test><br> </status><br><br><br> This script also won’t be able to extract attributes of elements without any CDATA. For eg, the script won’t be able to create variables corresponding to <test arg1="1">. It will only create the variables corresponding to <test1 arg2="2">abc</test1>.<br> <?xml version="1.0"?><br> <status><br>   <test arg1="1"><br>     <test1 arg2="2">abc</test1><br>   </test><br> </status><br><br> 38.写入XML数据库<br> #!/bin/bash<br><br> 39.ZIP压缩文件<br> #!/bin/sh<br> zip -r "/%%1" "%%2"<br><br> 40.ZIP解压缩<br> #!/bin/sh<br> unzip -x "/%%1" "%%2"<br><br> 41.获得应用程序完整路径<br> #!/bin/bash<br><br> 42.ZIP压缩文件夹<br> #!/bin/bash<br><br> 43.递归删除目录下的文件<br> #!/bin/bash<br> rm -if "%%1/*"<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find %%1 -type d -printf "%p$IFS")<br> do<br> for file in $path/*.c $path/*.cpp<br> do<br> if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then<br> #"$(path)/$(file)"<br> fi<br> done<br> done<br> IFS=$OLDIFS<br><br> 44.IDEA加密算法<br> #!/bin/bash<br><br> 45.RC6算法<br> #!/bin/bash<br> cat <<'EOF'> rc6.c<br> #include<stdio.h><br> /* Timing data for RC6 (rc6.c)<br><br> 128 bit key:<br> Key Setup:    1632 cycles<br> Encrypt:       270 cycles =    94.8 mbits/sec<br> Decrypt:       226 cycles =   113.3 mbits/sec<br> Mean:          248 cycles =   103.2 mbits/sec<br><br> 192 bit key:<br> Key Setup:    1885 cycles<br> Encrypt:       267 cycles =    95.9 mbits/sec<br> Decrypt:       235 cycles =   108.9 mbits/sec<br> Mean:          251 cycles =   102.0 mbits/sec<br><br> 256 bit key:<br> Key Setup:    1877 cycles<br> Encrypt:       270 cycles =    94.8 mbits/sec<br> Decrypt:       227 cycles =   112.8 mbits/sec<br> Mean:          249 cycles =   103.0 mbits/sec<br><br> */<br><br> #include "../std_defs.h"<br><br> static char *alg_name[] = { "rc6", "rc6.c", "rc6" };<br><br> char **cipher_name()<br> {<br>     return alg_name;<br> }<br><br> #define f_rnd(i,a,b,c,d)                    \<br>         u = rotl(d * (d + d + 1), 5);       \<br>         t = rotl(b * (b + b + 1), 5);       \<br>         a = rotl(a ^ t, u) + l_key;      \<br>         c = rotl(c ^ u, t) + l_key[i + 1]<br><br> #define i_rnd(i,a,b,c,d)                    \<br>         u = rotl(d * (d + d + 1), 5);       \<br>         t = rotl(b * (b + b + 1), 5);       \<br>         c = rotr(c - l_key[i + 1], t) ^ u;  \<br>         a = rotr(a - l_key, u) ^ t<br><br> u4byte  l_key[44];  /* storage for the key schedule         */<br><br> /* initialise the key schedule from the user supplied key   */<br><br> u4byte *set_key(const u4byte in_key[], const u4byte key_len)<br> {   u4byte  i, j, k, a, b, l[8], t;<br><br>     l_key[0] = 0xb7e15163;<br><br>     for(k = 1; k < 44; ++k)<br>        <br>         l_key[k] = l_key[k - 1] + 0x9e3779b9;<br><br>     for(k = 0; k < key_len / 32; ++k)<br><br>         l[k] = in_key[k];<br><br>     t = (key_len / 32) - 1; // t = (key_len / 32);<br><br>     a = b = i = j = 0;<br><br>     for(k = 0; k < 132; ++k)<br>     {   a = rotl(l_key + a + b, 3); b += a;<br>         b = rotl(l[j] + b, b);<br>         l_key = a; l[j] = b;<br>         i = (i == 43 ? 0 : i + 1); // i = (i + 1) % 44; <br>         j = (j == t ? 0 : j + 1);  // j = (j + 1) % t;<br>     }<br><br>     return l_key;<br> };<br><br> /* encrypt a block of text  */<br><br> void encrypt(const u4byte in_blk[4], u4byte out_blk[4])<br> {   u4byte  a,b,c,d,t,u;<br><br>     a = in_blk[0]; b = in_blk[1] + l_key[0];<br>     c = in_blk[2]; d = in_blk[3] + l_key[1];<br><br>     f_rnd( 2,a,b,c,d); f_rnd( 4,b,c,d,a);<br>     f_rnd( 6,c,d,a,b); f_rnd( 8,d,a,b,c);<br>     f_rnd(10,a,b,c,d); f_rnd(12,b,c,d,a);<br>     f_rnd(14,c,d,a,b); f_rnd(16,d,a,b,c);<br>     f_rnd(18,a,b,c,d); f_rnd(20,b,c,d,a);<br>     f_rnd(22,c,d,a,b); f_rnd(24,d,a,b,c);<br>     f_rnd(26,a,b,c,d); f_rnd(28,b,c,d,a);<br>     f_rnd(30,c,d,a,b); f_rnd(32,d,a,b,c);<br>     f_rnd(34,a,b,c,d); f_rnd(36,b,c,d,a);<br>     f_rnd(38,c,d,a,b); f_rnd(40,d,a,b,c);<br><br>     out_blk[0] = a + l_key[42]; out_blk[1] = b;<br>     out_blk[2] = c + l_key[43]; out_blk[3] = d;<br> };<br><br> /* decrypt a block of text  */<br><br> void decrypt(const u4byte in_blk[4], u4byte out_blk[4])<br> {   u4byte  a,b,c,d,t,u;<br><br>     d = in_blk[3]; c = in_blk[2] - l_key[43];<br>     b = in_blk[1]; a = in_blk[0] - l_key[42];<br><br>     i_rnd(40,d,a,b,c); i_rnd(38,c,d,a,b);<br>     i_rnd(36,b,c,d,a); i_rnd(34,a,b,c,d);<br>     i_rnd(32,d,a,b,c); i_rnd(30,c,d,a,b);<br>     i_rnd(28,b,c,d,a); i_rnd(26,a,b,c,d);<br>     i_rnd(24,d,a,b,c); i_rnd(22,c,d,a,b);<br>     i_rnd(20,b,c,d,a); i_rnd(18,a,b,c,d);<br>     i_rnd(16,d,a,b,c); i_rnd(14,c,d,a,b);<br>     i_rnd(12,b,c,d,a); i_rnd(10,a,b,c,d);<br>     i_rnd( 8,d,a,b,c); i_rnd( 6,c,d,a,b);<br>     i_rnd( 4,b,c,d,a); i_rnd( 2,a,b,c,d);<br><br>     out_blk[3] = d - l_key[1]; out_blk[2] = c;<br>     out_blk[1] = b - l_key[0]; out_blk[0] = a;<br> };<br> int main()<br> {<br><br> return 0;<br> }<br> EOF<br> gcc -o rc6 rc6.c<br> if [ $? -eq 0 ]; then<br> ./combine<br> else<br> echo 'Compile ERROR'<br> fi<br><br> 46.Grep<br> #!/bin/bash<br> grep -qE %%1 %%2<br><br> 47.直接创建多级目录<br> #!/bin/bash<br> mkdir -p %%1<br><br> 48.批量重命名<br> #!/bin/bash<br> find $PWD -type f -name '*\.cpp' |sed s/'\.cpp'//g|awk '{MV = "mv"};{C = "\.c"};{ CPP="\.cpp"}; {print MV, $1 CPP , $1 C}'|sh<br> ls | awk -F '-' '{print "mv "$0" "$2}' #去掉带'-'的前缀<br><br> 49.文本查找替换<br> #!/bin/bash<br> sed -e 's:%%2:%%3:g' %%1<br> #sed -e 's/%%2/%%3/g' %%1<br><br> 50.文件关联<br> #!/bin/bash<br><br> 51.批量转换编码从GB2312到Unicode<br> #!/bin/bash<br> scode="gbk"<br> dcode="ucs2"<br> for FILE in $(find $(pwd) -type f)<br> do<br> TMP_file=$(mktemp -p $(pwd))<br> if [ -f $FILE ]; then<br> Fright=$(stat -c %a $FILE)<br> Fuser=$(stat -c %U $FILE)<br> Fgrp=$(stat -c %G $FILE)<br> iconv -f $scode -t $dcode $FILE -o $TMP_file<br> mv $TMP_file $FILE<br> chmod $Fright $FILE<br> chown $Fuser.$Fgrp $FILE<br> fi<br> done<br><br> 52.设置JDK环境变量<br> #!/bin/bash<br> find "$PWD" -type f \( -iname '*.bin' \) -print0 | xargs -0 chmod +x<br> find -type f \( -iname '*.bin' \) -print |<br> while read filename<br> do<br>     case "$filename" in<br>     *.bin)<br>         xterm -e "$filename" && rm -if "$filename"<br>         ;;<br>     esac<br> done<br> OLDIFS=$IFS<br> IFS=$'\n'<br> for line in `cat ~/.bashrc`<br> do<br> if [[ "$line" =~ .*export.* ]]; then<br>     if [[ "$line" =~ .*JAVA_HOME=.* ]]; then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]]; then<br>        javahome=$line<br>       fi<br>     fi<br> fi<br> if [[ "$line" =~ export\ PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then<br>     javapath=$line<br> fi<br> if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then<br>     classpath=$line<br> fi<br> done<br> if [ ! -n "$javahome" ]; then<br> sed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_25' ~/.bashrc<br> else<br> sed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_32:g' ~/.bashrc<br> fi<br> if [ ! -n "$javapath" ]; then<br> sed -i '$a export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/.bashrc<br> fi<br> if [ ! -n "$classpath" ]; then<br> sed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/.bashrc<br> fi<br> IFS=$OLDIFS<br><br> #!/bin/bash<br> shift<br> OLDIFS=$IFS<br> IFS=$'\n'<br> for line in `cat ~/TestBash.txt` #~/.bashrc<br> do<br>   if [[ "$line" =~ .*export.* ]]; then<br>     if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]]; then<br>       classpath=$line<br>     elif [[ "$line" =~ export\ PATH=\$PATH:\$CATALINA_HOME/bin$ ]]; then<br>       jbosspath=$line<br> fi<br>     if [[ "$line" =~ .*JAVA_HOME=.* ]]; then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then<br>        javahome=$line<br>       fi<br>     elif [[ "$line" =~ .*CATALINA_HOME=.* ]];then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then<br>        catalinahome=$line<br>       fi<br>     elif [[ "$line" =~ .*TOMCAT_HOME=.* ]];then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then<br>        tomcathome=$line<br>       fi<br>     elif [[ "$line" =~ .*CATALINA_BASE=.* ]];then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then<br>        catalinabase=$line<br>       fi<br>     elif [[ "$line" =~ .*JBOSS_HOME=.* ]];then<br>       if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then<br>        jbosshome=$line<br>       fi<br>     fi<br>   elif [[ "$line" =~ ^PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then<br>     javapath=$line<br>   fi<br>   if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then<br>     classpath=$line<br>   fi<br>   if [[ "$line" =~ export\ PATH=\$PATH:\$JBOSS_HOME/bin$ ]];then<br>     jbosspath=$line<br>   fi<br> done<br> if [ ! -n "$javahome" ]; then<br> sed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_24' ~/TestBash.txt #~/.bashrc<br> else<br> sed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_24:g' ~/TestBash.txt<br> fi<br> if [ ! -n "$javapath" ]; then<br> sed -i '$a PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/TestBash.txt #~/.bashrc<br> fi<br> if [ ! -n "$classpath" ]; then<br> sed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/TestBash.txt #~/.bashrc<br> fi<br> if [ ! -n "$catalinahome" ]; then<br> sed -i '$a export CATALINA_HOME='$(pwd) ~/TestBash.txt #~/.bashrc<br> else<br> sed -i 's:'${catalinahome//\\/\\\\}':export CATALINA_HOME='$(pwd)':g' ~/TestBash.txt<br> fi<br> if [ ! -n "$tomcathome" ]; then<br> sed -i '$a export TOMCAT_HOME='$(pwd) ~/TestBash.txt #~/.bashrc<br> else<br> sed -i 's:'${tomcathome//\\/\\\\}':export TOMCAT_HOME='$(pwd)':g' ~/TestBash.txt<br> fi<br> if [ ! -n "$catalinabase" ]; then<br> sed -i '$a export CATALINA_BASE='$(pwd) ~/TestBash.txt #~/.bashrc<br> else<br> sed -i 's:'${catalinabase//\\/\\\\}':export CATALINA_BASE='$(pwd)':g' ~/TestBash.txt<br> fi<br> if [ ! -n "$jbosshome" ]; then<br> sed -i '$a export JBOSS_HOME='$(pwd) ~/TestBash.txt #~/.bashrc<br> else<br> sed -i 's:'${jbosshome//\\/\\\\}':export JBOSS_HOME='$(pwd)':g' ~/TestBash.txt<br> fi<br> if [ ! -n "$jbosspath" ]; then<br> sed -i '$a export PATH=$PATH:$CATALINA_HOME/bin' ~/TestBash.txt #~/.bashrc<br> fi<br> IFS=$OLDIFS<br><br> 53.批量转换编码从Unicode到GB2312<br> #!/bin/bash<br> scode="ucs2"<br> dcode="gbk"<br> for FILE in $(find $(pwd) -type f)<br> do<br> TMP_file=$(mktemp -p $(pwd))<br> if [ -f $FILE ]; then<br> Fright=$(stat -c %a $FILE)<br> Fuser=$(stat -c %U $FILE)<br> Fgrp=$(stat -c %G $FILE)<br> iconv -f $scode -t $dcode $FILE -o $TMP_file<br> mv $TMP_file $FILE<br> chmod $Fright $FILE<br> chown $Fuser.$Fgrp $FILE<br> fi<br> done<br><br> 54.删除空文件夹<br> #!/bin/bash<br> rmdir -p %%1<br><br> 55.GB2312文件转UTF-8格式<br> #!/bin/bash<br> iconv -f gbk -t utf8 %%1 -o %%2<br><br> 56.UTF-8文件转GB2312格式<br> #!/bin/bash<br> iconv -f utf8 -t  gbk %%1 -o %%2<br><br> 57.获取文件路径的父路径<br> #!/bin/bash<br> %%1=basename $PWD<br><br> 58.Unicode文件转UTF-8格式<br> #!/bin/bash<br> iconv -f ucs2 -t  utf-8 %%1 -o %%2<br><br> 59.CRC循环冗余校验<br> #!/bin/bash<br> cat <<'EOF'> crc.c<br> #include<stdio.h><br><br> unsigned long int crc32_table[256]; <br><br> unsigned long int ulPolynomial = 0x04c11db7; <br><br> unsigned long int Reflect(unsigned long int ref, char ch) <br><br>   {     unsigned long int value(0); <br><br>         // 交换bit0和bit7,bit1和bit6,类推 <br><br>         for(int i = 1; i < (ch + 1); i++) <br><br>          {            if(ref & 1) <br><br>                       value |= 1 << (ch - i); <br><br>                    ref >>= 1;      } <br><br>         return value; <br><br> } <br><br> init_crc32_table() <br><br>   {     unsigned long int crc,temp; <br><br>         // 256个值 <br><br>         for(int i = 0; i <= 0xFF; i++) <br><br>          {   temp=Reflect(i, 8); <br><br>                crc32_table[i]= temp<< 24; <br><br>                 for (int j = 0; j < 8; j++){ <br><br>              unsigned long int t1,t2; <br><br>   unsigned long int flag=crc32_table[i]&0x80000000; <br><br>                 t1=(crc32_table[i] << 1); <br><br>                 if(flag==0) <br><br>                   t2=0; <br><br>                 else <br><br>                   t2=ulPolynomial; <br><br>                 crc32_table[i] =t1^t2 ;        } <br><br>                crc=crc32_table[i]; <br><br>                crc32_table[i] = Reflect(crc32_table[i], 32); <br>         }<br> }<br> unsigned long GenerateCRC32(char xdata * DataBuf,unsigned long  len) <br><br>   { <br><br>         unsigned long oldcrc32; <br><br>         unsigned long crc32; <br><br>         unsigned long oldcrc; <br><br>         unsigned  int charcnt; <br><br>          char c,t; <br><br>         oldcrc32 = 0x00000000; //初值为0 <br><br>      charcnt=0; <br><br>          while (len--) { <br><br>                  t= (oldcrc32 >> 24) & 0xFF;   //要移出的字节的值 <br><br>      oldcrc=crc_32_tab[t];         //根据移出的字节的值查表 <br><br>                  c=DataBuf[charcnt];          //新移进来的字节值 <br><br>                  oldcrc32= (oldcrc32 << 8) | c;   //将新移进来的字节值添在寄存器末字节中 <br><br>                  oldcrc32=oldcrc32^oldcrc;     //将寄存器与查出的值进行xor运算 <br><br>                  charcnt++; <br><br>         } <br><br>          crc32=oldcrc32; <br><br>          return crc32; <br><br> } <br><br> 参数表可以先在PC机上算出来,也可在程序初始化时完成。下面是用于计算参数表的c语言子程序,在Visual C++ 6.0下编译通过。 <br><br> #include <stdio.h> <br><br> unsigned long int crc32_table[256]; <br><br> unsigned long int ulPolynomial = 0x04c11db7; <br><br> unsigned long int Reflect(unsigned long int ref, char ch) <br><br>   {     unsigned long int value(0); <br><br>         // 交换bit0和bit7,bit1和bit6,类推 <br><br>         for(int i = 1; i < (ch + 1); i++) <br><br>          {            if(ref & 1) <br><br>                       value |= 1 << (ch - i); <br><br>                    ref >>= 1;      } <br><br>         return value; <br><br> }<br> int main()<br> {<br>      unsigned long int crc,temp; <br><br>         // 256个值 <br><br>         for(int i = 0; i <= 0xFF; i++) <br><br>          {<br> temp=Reflect(i, 8);<br>                crc32_table[i]= temp<< 24; <br><br>                 for (int j = 0; j < 8; j++){ <br><br>              unsigned long int t1,t2; <br><br>   unsigned long int flag=crc32_table[i]&0x80000000;<br>                 t1=(crc32_table[i] << 1); <br><br>                 if(flag==0) <br><br>                   t2=0; <br><br>                 else <br><br>                   t2=ulPolynomial; <br><br>                 crc32_table[i] =t1^t2 ;       <br> } <br><br>                crc=crc32_table[i];<br>                crc32_table[i] = Reflect(crc32_table[i], 32);<br>         }<br> return 0;<br> }<br> EOF<br> gcc -o crc crc.c<br> if [ $? -eq 0 ]; then<br> ./combine<br> else<br> echo 'Compile ERROR'<br> fi<br><br> 60.判断是否为空文件<br> #!/bin/bash<br><br> 61.终止程序<br> #!/bin/sh<br> kill -KILL pidof %%1 -s<br> #killall %%1<br><br> 62.定时关机<br> #!/bin/sh<br> shutdown -h %%1 & #23:00<br> #shutdown -h now<br> #halt<br> #/sbin/poweroff<br> #init 0<br><br> 63.显示进程列表<br> #!/bin/sh<br> ps aux<br> #fuser -l<br><br> 64.遍历文件夹列出文件大小<br> #!/bin/sh<br> du -sH "%%1/*"<br><br> 65.GOST算法<br> #!/bin/bash<br><br> 66.对目标压缩文件解压缩到指定文件夹<br> #!/bin/bash<br><br> 67.保存文件时重名自动生成新文件<br> #!/bin/bash<br><br> 68.打开网页<br> #!/bin/sh<br> lynx %%1<br><br> 69.删除空文件夹整合操作<br> #!/bin/bash<br><br> 70.获取磁盘所有分区<br> #!/bin/sh<br> df -k<br><br> 71.激活一个程序或程序关联的文件<br> #!/bin/bash<br><br> 72.MP3播放<br> #!/bin/sh<br> amp "%%1"<br><br> 73.WAV播放<br> #!/bin/sh<br> amp "%%1"<br><br> 74.写图像到剪切板<br> #!/bin/bash<br><br> 75.从剪贴板复制图像到窗体<br> #!/bin/bash<br><br> 76.删除文件夹下的所有文件且不删除文件夹下的文件夹<br> #!/bin/sh<br> rm -if "%%1/*"<br><br> 77.XML遍历结点属性值<br> #!/bin/bash<br><br> 78.Unicode文件转GB2312格式<br> #!/bin/sh<br> iconv -f ucs2 -t  gbk %%1 -o %%2<br><br> 79.开源程序库Xercesc-C++代码工程中内联80.提取包含头文件列表<br> #!/bin/bash<br><br> 81.GB2312文件转Unicode格式<br> #!/bin/sh<br> iconv -f gbk -t  ucs2 %%1 -o %%2<br><br> 82.Java程序打包<br> #!/bin/bash<br><br> 83.UTF-8文件转Unicode格式<br> #!/bin/bash<br> iconv -f utf8 -t  ucs2 %%1 -o %%2<br><br> 84.创建PDF文档<br> #!/bin/bash<br><br> 85.创建Word文档<br> #!/bin/bash<br><br> 86.快速高效的文件加密<br> #!/bin/bash<br><br> 87.从CSV文件构造XML文档<br> #!/bin/bash<br><br> 88.从XML文档生成CSV文件<br> #!/bin/bash<br><br> 89.模拟键盘输入字符串<br> #!/bin/bash<br><br> 90.提取PDF文件中的文本<br> #!/bin/bash<br><br> 91.操作内存映射文件<br> #!/bin/bash<br> 91.1发送内存映射数据<br> #!/bin/bash<br><br> 91.2接收内存映射数据<br> #!/bin/bash<br><br> 92.重定向windows控制台程序的输出信息<br> #!/bin/bash<br><br> 93.基数转序数<br> #!/bin/bash<br><br> 94.数字月份转英文<br> #!/bin/bash<br><br> 95.报表相关<br> #!/bin/bash<br><br> 96.根据进程名获取进程ID<br> #!/bin/bash<br> pidof %%1 -s<br><br> 96.BCP导入<br> #!/bin/bash<br><br> 97.BCP导出<br> #!/bin/bash<br><br><br> 98.计算文件MD5值<br> #!/bin/bash<br> md5sum "%%1"<br><br> 99.计算获取文件夹中文件的MD5值<br> #!/bin/bash<br><br> 100.复制一个目录下所有文件到一个文件夹中<br> #!/bin/bash<br> cp $(find "%%1" -name *.*) "%%2"<br><br> 101.移动一个目录下所有文件到一个文件夹中<br> #!/bin/bash<br> mv $(find "%%1" -name *.*) "%%2"<br><br> 102.文件RSA高级加密<br> 十进制到十六进制<br> typeset -i16 BASE_16_NUM<br> BASE_16_NUM=%%1<br> echo $BASE_16_NUM<br><br> 八进制到十六进制<br> #!/bin/bash<br> typeset -i16 BASE_16_NUM<br> BASE_16_NUM=8#%%1<br> echo $BASE_16_NUM<br><br> 十进制到八进制<br> #!/bin/bash<br> printf %o %%1; echo<br><br> 十进制到十六进制<br> #!/bin/bash<br> printf %x %%1; echo<br><br> 103.计算文件大小<br> #!/bin/bash<br> wc "%%1"<br><br> 104.计算文件夹的大小<br> #!/sbin/ksh<br> dir=%%1<br> (cd $dir;pwd)<br> find $dir -type d -print | du | awk '{print $2, "== ("$1/2"kb)"}' |sort -f |<br> sed -e "s,[^ /]*/([^ /]*) ==,|--1," -e"s,[^ /]*/,| ,g"<br><br> 105.快速获得当前程序的驱动器、路径、文件名和扩展名<br><br> 106.磁盘剩余空间计算<br> #!/bin/bash<br> df -k<br><br> 107.获取当前程序进程ID<br> #!/bin/bash<br> pidof %%1 -s<br><br> 108.全盘搜索文件<br> #!/bin/bash<br> #updatedb<br> #locate %%1<br> slocate %%1<br><br> 109.获得当前登录的用户名<br> #!/bin/bash<br> whoami<br><br> 110.获得所有用户名<br> #!/bin/bash<br> who<br><br> 111.创建MySQL管理用户<br> #!/bin/bash<br> mysqladmin -u root password %%1<br><br> 112.管理MySQL数据库服务器<br> #!/bin/bash<br> 112.1.启动MySQL数据库服务器<br> mysqld -console<br><br> 112.2.登录MySQL数据库服务器<br> 112.2.1.登录本地MySQL数据库服务器<br> mysql -uroot -p%%1<br><br> 112.2.2.登录远程MySQL数据库服务器<br> mysql -h %%1 -u %%2 -p%%3<br><br> 112.3.关闭MySQL数据库服务器<br> mysqladmin -u root shutdown<br> #pkill -9 mysql<br><br> 112.4.测试MySQL数据库服务器<br> mysqlshow || mysqlshow -u root mysql || mysqladmin version status || mysql test<br><br> 113.MySQL执行查询<br> #!/bin/sh<br> mysqladmin -u %%1 -p%%2 SELECT * INTO OUTFILE './bestlovesky.xls' FROM bestlovesky WHERE 1 ORDER BY id DESC  LIMIT 0, 50;<br><br> mysql -u %%1 -p%%2 -e "SELECT * INTO OUTFILE './bestlovesky.xls' FROM bestlovesky WHERE 1 ORDER BY id DESC  LIMIT 0, 50;"<br><br> 114.创建Oracle管理用户<br> #!/bin/sh<br> 114.1.创建新用户<br> create user test identified by test default tablespace ts_test temporary<br> tablespace temp;<br><br> 114.2.给用户角色特权<br> grant connect,resource to test;<br><br> 115.登录Oracle数据库<br> #!/bin/bash<br> sqlplusw<br> sqlplus /nolog<br> conn username/password@Oranet<br> conn system/systempwd@whfc<br> conn sys/syspwd@whfc as sysdba<br><br> 115.创建Oracle表空间<br> #!/bin/bash<br> conn system@whfc01<br> create tablespace ts_test datafile '/data2/oradata/ciis/ts_test01.dbf' size<br><br> 116.添加Oracle数据文件<br> #!/bin/bash<br> alter tablespace ts_test add datafile '/data2/oradata/ciis/ts_test02.dbf' size<br><br> 117.查看Oracle表空间大小<br> #!/bin/bash<br> desc DBA_DATA_FILES<br><br> 118.查看Oracle剩余表空间大小<br> #!/bin/bash<br> desc DBA_FREE_SPACE<br><br> 119.查看Oracle当前用户表名<br> #!/bin/bash<br> select * from tab;<br><br> 120.Oracle创建索引<br> #!/bin/bash<br> CREATE INDEX idx_book_bookid ON book(bookname);<br><br> 121.Oracle创建主键约束<br> #!/bin/bash<br> ALTER TABLE book ADD CONSTRAINT pk_book_bookid PRIMARY KEY (bookid);<br><br> 122.Oracle显示表结构<br> #!/bin/bash<br> desc book<br><br> 123.Oracle查看表的索引<br> #!/bin/bash<br> column index_name format a30<br> select table_name, index_name from user_indexes;<br><br> 124.Oracle查看索引列<br> #!/bin/bash<br> select table_name, index_name, column_name, column_position from user_ind_columns;<br><br> 125.Oracle查看数据段占空间大小<br> #!/bin/bash<br> desc user_segments<br><br> 126.Oracle查看表占空间大小<br> #!/bin/bash<br> select segment_name,segment_type,bytes from user_segments where segment_type='TABLE';<br><br> 127.安全删除USB<br> #!/bin/bash<br> rundll32.exe shell32.dll,Control_RunDLL hotplug.dll<br><br> 128.打开SQL Server Management Studio<br> #!/bin/bash<br> sqlwb %%1.sql<br><br> 129.MySQL数据库导出备份<br> #!/bin/bash<br> mysqldump -u %%1 -p %%2 %%3>%%4.sql<br> mysqldump --opt test > mysql.test //将数据库test导出到mysql.test文件,后面是一个文本文件<br> mysqldump -u root -p123456 --databases dbname > mysql.dbname //就是把数据库dbname导出到文件mysql.dbname中。<br><br> 130.MySQL数据库数据导入<br> mysql -u %%1 -p %%2 %%3<%%4.sql<br> mysqlimport -u root -p123456 < mysql.dbname<br> 将文本数据导入数据库:<br> 文本数据的字段之间用tab键隔开<br> use test<br> load data local infile "文件名" into table 表名;<br> eg: load data local infile "D:/mysql.txt" into table mytable;<br> 导入.sql 文件命令<br> use database<br> source d:/mysql.sql;<br><br> 131.MySQL数据库检查<br> mysqlcheck -o %%3 -u %%1 -p %%2<br><br> 132.MySQL数据表文件修复<br> myisamchk -B -o %%1.myd<br><br> 1,查看数据库状态 及启动停止<br> /etc/init.d/mysqld status<br> /etc/init.d/mysqld start<br> /etc/init.d/mysqld stop<br><br> 2,给用户配置初始密码123456:<br> mysqladmin -u root -password 123456<br><br> 3,修改root用户密码为 abc123<br> mysqladmin -u root -p123456 password abc123<br><br> 4,如果想去掉密码:<br> mysqladmin -u root -pabc123 password ""<br><br> 5,root连接数据库有密码和无密码:<br> mysql -u root(-uroot) -p<br> mysql<br><br> 6,增加用户 test1 密码 abc,让它可以在任何主机上登录,并对所有数据库有查询,插入,修改,删除的权限:<br> 格式: grant select on 数据库.* to 用户名@登录主机 identified by "密码"<br> grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";<br><br> 8,增加一个用户test2,让它只可以在localhost上登录,并可以对数据库mydb进行查询,插入,修改,删除的操作,<br> 这样用户即使使用知道test2的密码,他也无法从internet 上直接访问数据库,只能通过mysql主机上的web页面来访问。<br> grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";<br> grant select,insert,update,delete on mydb.* to test2@localhost identified by ""; 设置无密码<br><br> 9,显示数据库列表:<br> show databases;<br> use mysql 打开库<br> show tables;<br><br> 10,表的操作<br> describle 表名; 显示数据表的结构<br> create database 库名;<br> drop database 库名;<br> create table 表名(字段设定列表)<br> drop table 表名;<br> delete from 表名;清空表记录<br> select * from 表名; 显示表中的记录<br> insert into 表名 values(, ,)<br><br> alter table 表名 add column <字段名><字段选项><br><br> 133.检查端口占用<br> #!/bin/bash<br> netstat -ano<br><br> 134.Linux下检查Apache是否安装<br> #!/bin/bash<br> rpm -qa | grep httpd<br><br> 135.Linux下启动Apache服务<br> #!/bin/bash<br> service httpd start<br><br> 136.Linux下停止Apache服务<br> #!/bin/bash<br> service httpd stop<br><br> 137.Linux下重新启动Apache服务<br> #!/bin/bash<br> service httpd restart<br><br> 138.Linux下自动加载Apache 服务<br> #!/bin/bash<br> chkconfig - level 3 httpd on<br><br> 139.Linux下不自动加载Apache 服务<br> #!/bin/bash<br> chkconfig - level 3 httpd off<br><br> 140.Linux下检查VSFTP是否安装<br> #!/bin/bash<br> rpm -qa | grep vsftpd<br><br> 141.Linux下启动VSFTP服务<br> #!/bin/bash<br> service vsftpd start<br><br> 142.Linux下停止VSFTP服务<br> #!/bin/bash<br> service vsftpd stop<br><br> 143.Linux下重新启动VSFTP服务<br> #!/bin/bash<br> service vsftpd restart<br><br> 144.Linux下检查VSFTP是否被启动<br> #!/bin/bash<br> pstree | grep vsftpd<br><br> 145.Linux下检查Sendmail是否安装<br> #!/bin/bash<br> rpm -qa | grep sendmail<br><br> 146.Linux下启动Sendmail服务<br> #!/bin/bash<br> service sendmail start<br><br> 147.Linux下停止Sendmail服务<br> #!/bin/bash<br> service sendma stop<br><br> 148.Linux下重新启动Sendmail服务<br> #!/bin/bash<br> service sendmail restart<br><br> 149.Linux下自动加载Sendmail 服务<br> #!/bin/bash<br> chkconfig - level 3 sendmail on<br><br> 150.Linux下不自动加载Sendmail 服务<br> #!/bin/bash<br> chkconfig - level 3 sendmail off<br><br> 151.Linux下文本图形界面配置启动服务<br> #!/bin/bash<br> ntsysv<br><br> 152.以数组的方式删除文件夹<br><br> 153.GCC批量编译<br> #!/bin/bash<br> find -type f \( -iname '*.c' -o -iname '*.cpp' \) -print |<br> while read filename<br> do<br>     case "$filename" in<br>     *.c)<br>       gcc "$filename" -o "$(dirname "$filename")"/"$(basename "$filename" .c)"<br>         ;;<br>     *.cpp)<br>         gcc "$filename" -o "$(dirname "$filename")"/"$(basename "$filename" .cpp)"<br>         ;;<br>     esac<br> done<br><br> 154.批量赋予可执行权限<br> #!/bin/bash<br> find "$PWD" -type f \( -iname '*.sh' -o  -iname '*.csh' -o  -iname '*.ksh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.rb' -o -iname '*.py' \) -print0 | xargs -0 chmod +x<br><br> #!/bin/bash<br> for file in *.sh *.pl *.bin *.run *.bundle *.rb *.py<br> do<br> if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then<br> chmod +x "$(file)"<br> fi<br> done<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $(pwd) -type d -printf "%p$IFS")<br> do<br> for file in $path/*.sh $path/*.pl $path/*.bin $path/*.run $path/*.bundle $path/*.rb $path/*.py<br> do<br> if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then<br> chmod +x "$(path)/$(file)"<br> fi<br> done<br> done<br> IFS=$OLDIFS<br><br> 155.批量执行<br> #!/bin/bash<br> find -type f \( -iname '*.sh' -o  -iname '*.csh' -o  -iname '*.ksh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.bin' -o -iname '*.class' -o -iname '*.rpm' -o -iname '*.rb' -o -iname '*.py' -o -iname '*.jar' \) -print |<br> while read filename<br> do<br>     case "$filename" in<br>     *.sh | *.csh | *.ksh)<br> if [ ! "./""$(basename $filename)" = $0 ]; then<br>         xterm -e "$filename"<br> fi<br>         ;;<br>     *.pl)<br>         xterm -e perl "$filename"<br>         ;;<br>     *.bin | *.run | *.bundle)<br>         xterm -e "$filename"<br>         ;;<br>     *.class)<br>         xterm -e java "$(dirname "$filename")"/"$(basename "$filename" .class)"<br>         ;;<br>     *.rpm)<br>         xterm -e rpm -ivh "$filename"<br>         ;;<br>     *.rb)<br>         xterm -e ruby "$filename"<br>         ;;<br>     *.py)<br>         xterm -e python "$filename"<br>         ;;<br>     *.jar)<br>         xterm -e java -jar "$filename"<br>         ;;<br>     esac<br> done<br><br> #!/bin/bash<br> find -maxdepth 1 -type f \( -iname '*.sh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.bin' -o -iname '*.class' -o -iname '*.rpm' -o -iname '*.rb' -o -iname '*.py' -o -iname '*.jar' \) -print<br> while read file<br> do<br>     case "${file##*.}" in<br>         sh ) xterm -e """"$file"""";;<br>         pl ) xterm -e perl """"$file"""";;<br>         bin ) xterm -e """"$file"""";;<br>         run ) xterm -e """"$file"""";;<br>         bundle ) xterm -e """"$file"""";;<br>         class ) xterm -e java """"${file%.*}"""";;<br>         rpm ) xterm -e rpm -ivh """"$file"""";;<br>         rb ) xterm -e ruby """"$file"""";;<br>         py ) xterm -e python """"$file"""";;<br>         jar ) xterm -e java -jar """"$file"""";;<br>     esac<br> done<br><br> 156.获取操作系统版本<br> #!/bin/bash<br> uname -r<br> #uname -a<br><br> 157.自身复制<br> #!/bin/bash<br> cp $0 "%%1"<br><br> 158.GCC批量创建静态库<br> #!/bin/bash<br> find -type f \( -iname '*.c' -o -iname '*.cpp' \) -print |<br> while read filename<br> do<br>     case "$filename" in<br>     *.c)<br>       g++  -c -o "$(dirname "$filename")"/"$(basename "$filename" .c)".o"" "$filename"<br>         ;;<br>     *.cpp)<br>       g++  -c -o "$(dirname "$filename")"/"$(basename "$filename" .cpp)".o"" "$filename"<br>         ;;<br>     esac<br> done<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $(pwd) -type d -printf "%p$IFS")<br> do<br> ar ru $path".a" $path"/*.o" && ranlib $path".a"<br> done<br> IFS=$OLDIFS<br> find "$PWD" -type f \( -iname '*.o' \) -print0 | xargs -0 rm -if<br><br> 159.Java批量打包EJB<br> #!/bin/bash<br> find "$PWD" -type f \( -iname '*.java' \) -print0 | xargs -0 javac<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $(pwd) -type d -printf "%p$IFS")<br> do<br> jar -cvf "$(path".jar")" "$(path"/*.*")" && cp "$(path".jar")" "$(JBOSS_HOME"/server/default/deploy")"<br> done<br> IFS=$OLDIFS<br><br> find "$PWD" -type f \( -iname '*.class' \) -print0 | xargs -0 rm -if<br><br> 160.获取环境变量<br><br> 161.dd<br> #!/bin/bash<br> dd<br><br> 162.显示只有小写字母的文件<br> #!/bin/bash<br> ls -1|awk '/^[[:lower:]].*/'<br><br> 163.Zip压缩目录中的所有文件<br> #!/bin/bash<br> direc="%%1" #$(pwd)<br> targetpath="%%2"<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $direc -type d -printf "%p$IFS")<br> do<br> mkdir -p "$targetpath/${path:${#direc}+1}"<br> for file in $path/*<br> do<br> if [ -f $file ]; then<br> zip -j "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.zip" "$file"<br> fi<br> done<br> done<br> IFS=$OLDIFS<br><br> 164.Zip解压缩目录中的所有文件<br> #!/bin/bash<br> direc="%%1" #$(pwd)<br> targetpath="%%2"<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $direc -type d -printf "%p$IFS")<br> do<br> mkdir -p "$targetpath/${path:${#direc}+1}"<br> unzip -x "$path/*.zip" -d "$targetpath/${path:${#direc}+1}"<br> done<br> IFS=$OLDIFS<br><br> 165.分布式复制文件夹<br> #!/bin/bash<br> direc="%%1" #$(pwd)<br> targetpath="%%2"<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $direc -type d -printf "%p$IFS")<br> do<br> mkdir -p "$targetpath/${path:${#direc}+1}"<br> rm -if "$targetpath/${path:${#direc}+1}/*.tmp"<br> for file in $path/*<br> do<br> if [ -f $file ]; then<br> cp "$file" "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.tmp"<br> mv "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.tmp" "$targetpath/${path:${#direc}+1}/${file:${#path}+1}"<br> fi<br> done<br> done<br> IFS=$OLDIFS<br><br> 166.注册反注册组件<br> #!/bin/bash<br> regsvr32 "%%1"<br><br> 167.LZMA<br> #!/bin/bash<br><br> 168.CAB压缩文件<br> #!/bin/bash<br><br> 169.CAB解压缩文件<br> #!/bin/bash<br><br><br> 170.锁定屏幕<br> #!/bin/sh<br> RUNDLL32.exe USER32,LockWorkStation<br><br> 171.以其它用户的身份运行程序<br> #!/bin/bash<br><br> 172.添加系统用户<br> #!/bin/sh<br> useradd "%%1"<br><br> 173.删除系统用户<br> #!/bin/sh<br> userdel "%%1"<br><br> 174.添加用户组<br> #!/bin/sh<br> groupadd -g 2000 "%%1"<br><br> 175.删除用户组<br> #!/bin/sh<br> groupdel "%%1"<br><br> 176.赋予管理员权限<br> #!/bin/bash<br><br><br> 177.收回管理员权限<br> #!/bin/bash<br><br><br> 178.遍历目录产生删除文件的脚本<br> #!/bin/bash<br><br><br> 179.LZW压缩文件<br> #!/bin/bash<br> z<br><br> 180.LZW解压缩文件<br> #!/bin/bash<br> z<br><br> 181.递归赋予目录权限<br> #!/bin/bash<br> direc="%%1" #$(pwd)<br> OLDIFS=$IFS<br> IFS=:<br> for path in $( find $direc -type d -printf "%p$IFS")<br> do<br> chown -R root.root "$path"<br> done<br> IFS=$OLDIFS<br><br> 182.卸载RPM包<br> #!/bin/sh<br> rpm -e  "%%1"<br><br> 183.删除源文件中的注释<br> #!/bin/sh<br><br> 184.设置目录下所有文件属性为可写<br> #!/bin/sh<br><br> 185.统计目录下所有文件的总共行数<br> #!/bin/sh<br> cat * |wc<br> ls *|xargs wc -l<br> find ./ -name "*c" | xargs wc -l<br><br> 186.删除自身<br> #!/bin/rm<br> exit 65<br> #rm $0<br><br> 187.打开终端<br> #!/bin/bash -l<br><br> 188.弹出光驱<br> #!/bin/sh<br> eject<br><br> 189.收回光驱<br> #!/bin/sh<br> eject -t<br><br> 190.磁盘总空间计算<br><br> 191.解析CSV文件<br><br> 192.按行保存文件为数组<br><br> 193.MySQL执行SQL文件<br> mysqladmin -u %%1 -p%%2 < %%3.sql<br><br> mysql -u %%1 -p%%2 -e "SOURCE %%3.sql"</span> </div> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1291738474105348096"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(shell脚本学习)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1828125281446096896.htm" title="Shell脚本学习_流程控制与函数" target="_blank">Shell脚本学习_流程控制与函数</a> <span class="text-muted">不想秃头儿</span> <a class="tag" taget="_blank" href="/search/shell%E8%84%9A%E6%9C%AC%E5%AD%A6%E4%B9%A0/1.htm">shell脚本学习</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录一、流程控制1、ifelse语句2、case语句3、while循环4、for循环5、until循环6、select语句二、函数1、系统函数1.basename系统函数:2.dirname系统函数2、自定义函数1.无带参数:2.有参函数3.shell程序与函数的区别三、重定向输入输出一、流程控制1、ifelse语句if语法:#多行if条件then命令fi#一行if条件;then命令;fiif-e</div> </li> <li><a href="/article/1756666226815287296.htm" title="shell脚本学习笔记" target="_blank">shell脚本学习笔记</a> <span class="text-muted">愤愤的有痣青年</span> <div>shell脚本是一种可以在linux系统下运行的解释性脚本,应用广泛,功能强大,以下是本人在学习shell脚本过程中的学习笔记.shell脚本一般第一行为#!/bin/bash或#!/bin/sh,这是用来指定运行的解释器程序的路径第一个脚本#!/bin/bashecho"helloshell"脚本名称为test.sh,其运行方式有两种,一种是赋予可执行权限后使用./test.sh运行,另一种是手</div> </li> <li><a href="/article/1756507791075328000.htm" title="Linux_Shell脚本学习第四章-让文本飞(上)" target="_blank">Linux_Shell脚本学习第四章-让文本飞(上)</a> <span class="text-muted">qq_36521904</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Shell%E8%84%9A%E6%9C%AC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">Shell脚本学习笔记</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a> <div>一、使用正则表达式1.1正则表达式的规则1.1.1位置标记**位置标记锚点(positionmarkeranchor)是标识字符串位置的正则表达式。**默认情况下,正则表达式所匹配的字符可以出现在字符串中任何位置,如下图。1.1.2标识符标识符是正则表达式的基础组成部分。它定义了那些为了匹配正则表达式,必须存在(或不存在)的字符,如下图。1.1.3数量修饰符一个标识符可以出现一次、多次或是不出现。</div> </li> <li><a href="/article/1755852899151265792.htm" title="Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)一" target="_blank">Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)一</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Shell%E8%84%9A%E6%9C%AC%E5%AD%A6%E4%B9%A0/1.htm">Shell脚本学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>第三部分:Shell高级(一)这一章讲解Shell脚本编程的进阶内容,主要涉及重定向、文件描述符、管道和过滤器、子Shell、信号等。本章会使用到一些底层的编程知识,有C语言和C++编程经验的程序员阅读起来将会更加轻松。一、LinuxShell重定向(输入输出重定向)精讲LinuxShell重定向分为两种,一种输入重定向,一种是输出重定向;从字面上理解,输入输出重定向就是「改变输入与输出的方向」的</div> </li> <li><a href="/article/1754383372756467712.htm" title="Shell脚本学习笔记之(自动填充函数模板)" target="_blank">Shell脚本学习笔记之(自动填充函数模板)</a> <span class="text-muted">呼啦啦的爱</span> <div>其实,vii就是写的一个脚本,跟vi没半毛钱关系,只不过借用一下这个名字而已。那这个脚本长什么样呢?look:下面来详细的解析上面的代码,来看第1行:#!/bin/bash这是Shell脚本的格式,没啥好讲的。再来看第3-6行:if[$#-eq0]thenvifi这是是判断执行vii的时候带不带参数,假如不带参数,那么就直接启动vi再来看第8-16行:if[$#-eq1]thensuffix=`e</div> </li> <li><a href="/article/1745057782341582848.htm" title="ping通网络脚本" target="_blank">ping通网络脚本</a> <span class="text-muted">伪程序文艺猿</span> <a class="tag" taget="_blank" href="/search/Linux%E8%84%9A%E6%9C%AC%E5%AD%A6%E4%B9%A0/1.htm">Linux脚本学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>shell脚本学习——ping通网络脚本案例1[root@localhostshell_scripts]#catping.sh#!/bin/bashclearecho"请输入要ping的IP地址:"readIPifping-c1$IP&>/dev/null;thenecho-e"\t\t\t\t---网络可以ping通$IP!---"elseecho-e"\t\t\t\t---网络不能ping通$</div> </li> <li><a href="/article/1742587038122655744.htm" title="Shell脚本学习-阶段二十八-shell练习二" target="_blank">Shell脚本学习-阶段二十八-shell练习二</a> <span class="text-muted">低调的小哥哥</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>文章目录-练习2前言1.编写shell脚本程序,完成如下功能:输出helloworld!2.编写shell脚本程序,完成如下功能:输入你的姓名,输出hello,nicetomeetyou你的姓名!3.编写shell脚本程序,完成如下功能:输出当前登录用户的身份及当前所在目录(使用whoami及pwd命令)4.编写shell脚本程序,完成如下功能:输入一个合法的目录名,判断当前目录是否存在该目录,如</div> </li> <li><a href="/article/1738053658551050240.htm" title="shell脚本学习——编程之变量定义" target="_blank">shell脚本学习——编程之变量定义</a> <span class="text-muted">小方童鞋</span> <a class="tag" taget="_blank" href="/search/shell-%E5%AD%A6%E4%B9%A0/1.htm">shell-学习</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>文章目录SHELL编程模块课程目标一、SHELL介绍1.编程语言分类2.shell简介3.shell脚本㈠什么是shell脚本?㈡什么时候用到脚本?㈢shell脚本能干啥?㈣如何学习shell脚本?㈤学习shell脚本的秘诀㈥shell脚本的基本写法㈦shell脚本的执行方法==二、变量的定义==1.变量是什么?2.什么时候需要定义变量?3.变量如何定义?4.变量的定义规则㈠变量名区分大小写㈡变量</div> </li> <li><a href="/article/1737053101791174656.htm" title="shell脚本学习" target="_blank">shell脚本学习</a> <span class="text-muted">waper97</span> <a class="tag" taget="_blank" href="/search/shell%E8%84%9A%E6%9C%AC/1.htm">shell脚本</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>$0:Shell本身的文件名$!:Shell最后运行的后台进程PID$$:当前脚本运行的进程PID$?:执行上一个指令的返回值(显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)$*:所有参数列表。如"$*“用双引号引起来的情况、以”$1$2…$n"的形式输出所有参数,此选项参数可超过9个$@:所有参数列表。如"$@“用双引号引起来的情况、以”$1"“$2”…“$n”的形式输出所有参数</div> </li> <li><a href="/article/1736106258945073152.htm" title="Shell脚本学习指南(三)——文本处理工具" target="_blank">Shell脚本学习指南(三)——文本处理工具</a> <span class="text-muted">Jacky~~</span> <a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a> <div>文章目录排序文本行的排序以字段的排序文本块排序sort的效率sort的稳定性sort小结删除重复重新格式化段落计算行数、字数以及字符数打印打印技术的演化其他打印软件提取开头或结尾数行排序文本含有独立数据记录的文本文恶剪,通常都可以拿来排序。一个可预期的记录次序,会让用户的生活更便利:书的索引、字典、目录以及电话薄,如果没有次序依据就毫无价值。排序后的记录更易于程序化;也更有效率。就像awk、cut</div> </li> <li><a href="/article/1736000826205331456.htm" title="shell脚本学习" target="_blank">shell脚本学习</a> <span class="text-muted">Ileo_km</span> <div>shell脚本编程exportPS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H\e[m\e[4m`pwd`\e[m\e[1;37m]\e[m\e[1;36m\e[m\n\$'当shell脚本运行时,它会先查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常是/etc/profile、~/bash_profile、~/bash_</div> </li> <li><a href="/article/1731939019765395456.htm" title="Shell脚本:Linux Shell脚本学习指南(第四部分Bash Shell快捷键)" target="_blank">Shell脚本:Linux Shell脚本学习指南(第四部分Bash Shell快捷键)</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>第四年部分:BashShell快捷键有人说,Linux是为喜欢敲键盘的人们服务的,BashShell也遵循这个原则,它支持很多快捷键,可以让我们很方便的书写命令,比如粘贴、复制、移动到行首、移动到行尾等。此外,Bash还支持命令自动补全,以及历史命令检索。一、BashShell快捷键大全开玩笑地说,我经常把Unix描述为“这个操作系统是为喜欢敲键盘的人们服务的。”当然,Unix甚至还有一个命令行,</div> </li> <li><a href="/article/1731571731350499328.htm" title="Linux学习笔记之七(shell脚本的基本语法)" target="_blank">Linux学习笔记之七(shell脚本的基本语法)</a> <span class="text-muted">__TAT__</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>Shell1、Shell脚本2、常用运算符2、特殊语法4、关于变量的一些命令4.1、echo4.2、export4.3、read4.4、declare/typeset4.5、local4.6、unset5、基本逻辑语法5.1、if判断5.2、for循环5.3、while循环5.4、case语句6、函数定义7、多脚本链接1、Shell脚本学习shell脚本开发之前,必须得有一些基础的Linux相关知</div> </li> <li><a href="/article/1731061398550687744.htm" title="Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)四" target="_blank">Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)四</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>十九、LinuxShelltrap命令:捕获信号到目前为止,我们在本教程所见的脚本中还没有需要信号处理功能的,因为它们的内容相对比较简单,执行时间很短,而且不会创建临时文件。而对于较大的或者更复杂的脚本来说,如果脚本具有信号处理机制可能就比较有用了。当我们设计一个大且复杂的脚本时,考虑到当脚本运行时出现用户退出或系统关机会发生什么是很重要的。当这样的事件发生时,一个信号将会发送到所有受影响的进程。</div> </li> <li><a href="/article/1731061271048040448.htm" title="Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)三" target="_blank">Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)三</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>十三、如何检测子Shell和子进程?上节我们说了子Shell和子进程的区别,这节就来看一下如何检测它们。我们都知道使用$变量可以获取当前进程的ID,我在父Shell和子Shell中都输出$的值,只要它们不一样,不就是创建了一个新的进程吗?那我们就来试一下吧。[mozhiyan@localhost~]$echo$$#父ShellPID3299[mozhiyan@localhost~]$(echo$$</div> </li> <li><a href="/article/1729982291561754624.htm" title="Shell脚本学习" target="_blank">Shell脚本学习</a> <span class="text-muted">_二师兄_</span> <div>PARTI---Shell变量变量类型:1)局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。2)环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。3)shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是</div> </li> <li><a href="/article/1729520164149473280.htm" title="shell脚本学习笔记" target="_blank">shell脚本学习笔记</a> <span class="text-muted">BuffaloX_X</span> <a class="tag" taget="_blank" href="/search/debian/1.htm">debian</a><a class="tag" taget="_blank" href="/search/gnu/1.htm">gnu</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a> <div>目录结构:/d/home/bash_test/total39drwxr-xr-x1Administrator197121012月616:22demo_folder1/drwxr-xr-x1Administrator197121012月616:22demo_folder2/prw-rw-rw-1Administrator197121012月1020:09my_pipe|-rwxr-xr-x1Admi</div> </li> <li><a href="/article/1728966008208699392.htm" title="linux命令行与shell脚本编程大全以及shell脚本学习指南" target="_blank">linux命令行与shell脚本编程大全以及shell脚本学习指南</a> <span class="text-muted">往事不堪回首_2e46</span> <div>linux命令行与shell脚本编程大全以及shell脚本学习指南下载地址:https://fgk.pw/i/me9kEpG0753</div> </li> <li><a href="/article/1728794087051571200.htm" title="Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)四" target="_blank">Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)四</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>十九、LinuxShelltrap命令:捕获信号到目前为止,我们在本教程所见的脚本中还没有需要信号处理功能的,因为它们的内容相对比较简单,执行时间很短,而且不会创建临时文件。而对于较大的或者更复杂的脚本来说,如果脚本具有信号处理机制可能就比较有用了。当我们设计一个大且复杂的脚本时,考虑到当脚本运行时出现用户退出或系统关机会发生什么是很重要的。当这样的事件发生时,一个信号将会发送到所有受影响的进程。</div> </li> <li><a href="/article/1728793960652025856.htm" title="Shell脚本:Linux Shell脚本学习指南(第四部分Bash Shell快捷键)" target="_blank">Shell脚本:Linux Shell脚本学习指南(第四部分Bash Shell快捷键)</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>第四年部分:BashShell快捷键有人说,Linux是为喜欢敲键盘的人们服务的,BashShell也遵循这个原则,它支持很多快捷键,可以让我们很方便的书写命令,比如粘贴、复制、移动到行首、移动到行尾等。此外,Bash还支持命令自动补全,以及历史命令检索。一、BashShell快捷键大全开玩笑地说,我经常把Unix描述为“这个操作系统是为喜欢敲键盘的人们服务的。”当然,Unix甚至还有一个命令行,</div> </li> <li><a href="/article/1728605853847728128.htm" title="Shell脚本:Linux Shell脚本学习指南(第二部分Shell编程)三" target="_blank">Shell脚本:Linux Shell脚本学习指南(第二部分Shell编程)三</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>第二部分:Shell编程(三)二十一、Shelldeclare和typeset命令:设置变量属性declare和typeset都是Shell内建命令,它们的用法相同,都用来设置变量的属性。不过typeset已经被弃用了,建议使用declare代替。declare命令的用法如下所示:declare[+/-][aAfFgilprtux][变量名=变量值]其中,-表示设置属性,+表示取消属性,aAfFg</div> </li> <li><a href="/article/1728605854640451584.htm" title="Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)二" target="_blank">Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)二</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>七、ShellHereString(内嵌字符串,嵌入式字符串)HereString是《六、ShellHereDocument(内嵌文档/立即文档)》的一个变种,它的用法如下:commandfourfivesix>seveneight"ONETWOTHEREFOURFIVESIXSEVENEIGHT2、总结与HereDocument相比,HereString通常是相当方便的,特别是发送变量内容(而不</div> </li> <li><a href="/article/1727535147491864576.htm" title="shell脚本学习笔记07" target="_blank">shell脚本学习笔记07</a> <span class="text-muted">抹茶味的西瓜汁</span> <a class="tag" taget="_blank" href="/search/shell%E8%84%9A%E6%9C%AC/1.htm">shell脚本</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>如何让shell实现可选择性执行的功能用了while进行循环,是死循环,在循环时,使用case进行使用哪个脚本进行执行。使用clear进行每一次操作前的清屏,eof代表输入这个会显示目录。read用来读取输入的值,如果不输入值不会进行任何操作。注意空格。运行:巡检内存使用率:free-m查看内存使用情况:sed-n'2p'获取到第二行。因为是以制表符为单位的,,所以这里用awk'{print$2}</div> </li> <li><a href="/article/1726432698240675840.htm" title="Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一" target="_blank">Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>你好,欢迎来到「LinuxShell脚本」学习专题,你将享受到免费的Shell编程资料,以及很棒的浏览体验。这套Shell脚本学习指南针对初学者编写,它通俗易懂,深入浅出,不仅讲解了基本知识,还深入底层原理,能让你在1天时间内快速了解Shell(当然,要想深入学习还得假以时日)。Shell既是一个连接用户和linux内核的程序,又是一门管理Linux系统的脚本语言。Shell脚本虽然没有C++、P</div> </li> <li><a href="/article/1726430009691811840.htm" title="Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)二" target="_blank">Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)二</a> <span class="text-muted">别致的SmallSix</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>第一部分:Shell基础(开胃菜)二八、LinuxShell命令提示符启动Linux桌面环境自带的终端模拟包,或者从Linux控制台登录后,便可以看到Shell命令提示符。看见命令提示符就意味着可以输入命令了。命令提示符不是命令的一部分,它只是起到一个提示作用。不同的Linux发行版使用的提示符格式大同小异,例如在CentOS中,默认的提示符类似下面这样:[mozhiyan@localhost~]</div> </li> <li><a href="/article/1725256743312764928.htm" title="shell脚本学习06(小滴课堂)" target="_blank">shell脚本学习06(小滴课堂)</a> <span class="text-muted">抹茶味的西瓜汁</span> <a class="tag" taget="_blank" href="/search/shell%E8%84%9A%E6%9C%AC/1.htm">shell脚本</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>fi是结束循环的意思。这里脚本1:代表着脚本和1.txt文件处于同一目录下。脚本2为绝对路径的写法。在使用./进行启动时,我们需要给文件赋予执行权限。把文件名改为2.txt:什么都没有返回,说明文件已经不存在。可以使用脚本2ifelse的方式去写:还可以使用$进行传参的方式:接下来,我们来学习多分支判断:for循环:可以用seq命令进行循环遍历。只ping两次。case循环控制:while循环:</div> </li> <li><a href="/article/1724503215443095552.htm" title="Shell脚本学习笔记(一)" target="_blank">Shell脚本学习笔记(一)</a> <span class="text-muted">搬砖小张</span> <a class="tag" taget="_blank" href="/search/shell%E8%84%9A%E6%9C%AC/1.htm">shell脚本</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>第一章构建基本脚本1.1使用多个命令shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至将一个命令的结果传给另一个命令。shell可以让你将多个命令串起来,一次执行完成。如果要两个命令一起运行,可以把他们放在同一行中,彼此用分号隔开。$date;whoMonFeb2115:36:09EST2014Christinetty22014-02-2115:26Samanthatty32014-0</div> </li> <li><a href="/article/1721452286196133888.htm" title="shell脚本学习" target="_blank">shell脚本学习</a> <span class="text-muted">Tonight 1</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>文章目录一、文本处理工具1.grep文本处理工具语法和选项2、cut工具语法和选项3、sort工具4、uniq工具uniq和sort结合使用的练习5、tee工具6、diff工具1、正常显示2、上下文显示-c3、合并显示-u4、diff其他方法使用7、paste工具8、tr工具练习二、bash的特性1、命令和文件自动补全2、常见的快捷键3、常用的通配符(重点)4、bash中的引号(重点)三、SHEL</div> </li> <li><a href="/article/1721061932481458176.htm" title="【linux系统基础知识-Shell脚本学习笔记12-循环】" target="_blank">【linux系统基础知识-Shell脚本学习笔记12-循环】</a> <span class="text-muted">dai9812</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>12.1.【循环说明解释】循环是可以使你多次执行一系列命令。循环包括:for循环•while循环•select循环•for....do....done,while...do...done,until...do...done,12.2.【for循环】•for循环使你对列表中的每一项重复执行一系列命令。•语法格式:•fornameinword1world2…worldN•do•list•done•na</div> </li> <li><a href="/article/1720573621979656192.htm" title="Docker images 常用shell脚本" target="_blank">Docker images 常用shell脚本</a> <span class="text-muted">Tee xm</span> <a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a> <div>这个是标题shell脚本学习1)拉取镜像根据镜像名和tag保存在本地2)删除Linux机器本机的镜像3)dockerload并且修改镜像的域名和项目名push到新的harborshell脚本学习1)拉取镜像根据镜像名和tag保存在本地docker_pull_save.sh.#!/bin/bash#定义镜像列表images_list=$(cat"image_list.txt")#遍历镜像列表fori</div> </li> <li><a href="/article/101.htm" title="数据采集高并发的架构应用" target="_blank">数据采集高并发的架构应用</a> <span class="text-muted">3golden</span> <a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a> <div>问题的出发点:          最近公司为了发展需要,要扩大对用户的信息采集,每个用户的采集量估计约2W。如果用户量增加的话,将会大量照成采集量成3W倍的增长,但是又要满足日常业务需要,特别是指令要及时得到响应的频率次数远大于预期。       &n</div> </li> <li><a href="/article/228.htm" title="不停止 MySQL 服务增加从库的两种方式" target="_blank">不停止 MySQL 服务增加从库的两种方式</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux%E8%A7%86%E9%A2%91/1.htm">linux视频</a><a class="tag" taget="_blank" href="/search/linux%E8%B5%84%E6%96%99/1.htm">linux资料</a><a class="tag" taget="_blank" href="/search/linux%E6%95%99%E7%A8%8B/1.htm">linux教程</a><a class="tag" taget="_blank" href="/search/linux%E8%87%AA%E5%AD%A6/1.htm">linux自学</a> <div>现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。  一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabacku</div> </li> <li><a href="/article/355.htm" title="Quartz——SimpleTrigger触发器" target="_blank">Quartz——SimpleTrigger触发器</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/SimpleTrigger/1.htm">SimpleTrigger</a><a class="tag" taget="_blank" href="/search/TriggerUtils/1.htm">TriggerUtils</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2208166 一.概述 SimpleTrigger触发器,当且仅需触发一次或者以固定时间间隔周期触发执行;   二.SimpleTrigger的构造函数 SimpleTrigger(String name, String group):通过该构造函数指定Trigger所属组和名称; Simpl</div> </li> <li><a href="/article/482.htm" title="Informatica应用(1)" target="_blank">Informatica应用(1)</a> <span class="text-muted">18289753290</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/lookup/1.htm">lookup</a><a class="tag" taget="_blank" href="/search/%E7%BB%84%E4%BB%B6/1.htm">组件</a><a class="tag" taget="_blank" href="/search/Informatica/1.htm">Informatica</a> <div>1.如果要在workflow中调用shell脚本有一个command组件,在里面设置shell的路径;调度wf可以右键出现schedule,现在用的是HP的tidal调度wf的执行。 2.designer里面的router类似于SSIS中的broadcast(多播组件);Reset_Workflow_Var:参数重置 (比如说我这个参数初始是1在workflow跑得过程中变成了3我要在结束时还要</div> </li> <li><a href="/article/609.htm" title="python 获取图片验证码中文字" target="_blank">python 获取图片验证码中文字</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>根据现成的开源项目 http://code.google.com/p/pytesser/改写 在window上用easy_install安装不上  看了下源码发现代码很少  于是就想自己改写一下   添加支持网络图片的直接解析   #coding:utf-8 #import sys #reload(sys) #sys.s</div> </li> <li><a href="/article/736.htm" title="AJAX" target="_blank">AJAX</a> <span class="text-muted">永夜-极光</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>1.AJAX功能:动态更新页面,减少流量消耗,减轻服务器负担   2.代码结构:    <html> <head> <script type="text/javascript"> function loadXMLDoc() { .... AJAX script goes here ... </div> </li> <li><a href="/article/863.htm" title="创业OR读研" target="_blank">创业OR读研</a> <span class="text-muted">随便小屋</span> <a class="tag" taget="_blank" href="/search/%E5%88%9B%E4%B8%9A/1.htm">创业</a> <div>        现在研一,有种想创业的想法,不知道该不该去实施。因为对于的我情况这两者是矛盾的,可能就是鱼与熊掌不能兼得。                研一的生活刚刚过去两个月,我们学校主要的是</div> </li> <li><a href="/article/990.htm" title="需求做得好与坏直接关系着程序员生活质量" target="_blank">需求做得好与坏直接关系着程序员生活质量</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/IT+%E7%94%9F%E6%B4%BB/1.htm">IT 生活</a> <div>         这个故事还得从去年换工作的事情说起,由于自己不太喜欢第一家公司的环境我选择了换一份工作。去年九月份我入职现在的这家公司,专门从事金融业内软件的开发。十一月份我们整个项目组前往北京做现场开发,从此苦逼的日子开始了。        系统背景:五月份就有同事前往甲方了解需求一直到6月份,后续几个月也完</div> </li> <li><a href="/article/1117.htm" title="如何定义和区分高级软件开发工程师" target="_blank">如何定义和区分高级软件开发工程师</a> <span class="text-muted">aoyouzi</span> <div>在软件开发领域,高级开发工程师通常是指那些编写代码超过 3 年的人。这些人可能会被放到领导的位置,但经常会产生非常糟糕的结果。Matt Briggs 是一名高级开发工程师兼 Scrum 管理员。他认为,单纯使用年限来划分开发人员存在问题,两个同样具有 10 年开发经验的开发人员可能大不相同。近日,他发表了一篇博文,根据开发者所能发挥的作用划分软件开发工程师的成长阶段。   初</div> </li> <li><a href="/article/1244.htm" title="Servlet的请求与响应" target="_blank">Servlet的请求与响应</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/get%E6%8F%90%E4%BA%A4/1.htm">get提交</a><a class="tag" taget="_blank" href="/search/java%E5%A4%84%E7%90%86post%E6%8F%90%E4%BA%A4/1.htm">java处理post提交</a> <div>  Servlet是tomcat中的一个重要组成,也是负责客户端和服务端的中介     1,Http的请求方式(get  ,post);   客户端的请求一般都会都是Servlet来接受的,在接收之前怎么来确定是那种方式提交的,以及如何反馈,Servlet中有相应的方法,  http的get方式 servlet就是都doGet(</div> </li> <li><a href="/article/1371.htm" title="web.xml配置详解之listener" target="_blank">web.xml配置详解之listener</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/listener/1.htm">listener</a> <div>一.定义 <listener> <listen-class>com.myapp.MyListener</listen-class> </listener>   二.作用        该元素用来注册一个监听器类。可以收到事件什么时候发生以及用什么作为响</div> </li> <li><a href="/article/1498.htm" title="Web页面性能优化(yahoo技术)" target="_blank">Web页面性能优化(yahoo技术)</a> <span class="text-muted">Bill_chen</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/Yahoo/1.htm">Yahoo</a> <div>1.尽可能的减少HTTP请求数 content 2.使用CDN server 3.添加Expires头(或者 Cache-control) server 4.Gzip 组件 server 5.把CSS样式放在页面的上方。 css 6.将脚本放在底部(包括内联的) javascript 7.避免在CSS中使用Expressions css 8.将javascript和css独立成外部文</div> </li> <li><a href="/article/1625.htm" title="【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序" target="_blank">【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>游标   游标,简单的说就是一个查询结果的指针。游标作为数据库的一个对象,使用它是包括 声明 打开 循环抓去一定数目的文档直到结果集中的所有文档已经抓取完 关闭游标   游标的基本用法,类似于JDBC的ResultSet(hasNext判断是否抓去完,next移动游标到下一条文档),在获取一个文档集时,可以提供一个类似JDBC的FetchSize</div> </li> <li><a href="/article/1752.htm" title="ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法" target="_blank">ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/ORA-12514/1.htm">ORA-12514</a> <div> 今天通过Oracle SQL*Plus连接远端服务器的时候提示“监听程序当前无法识别连接描述符中请求服务”,遂在网上找到了解决方案: ①打开Oracle服务器安装目录\NETWORK\ADMIN\listener.ora文件,你会看到如下信息:   # listener.ora Network Configuration File: D:\database\Oracle\net</div> </li> <li><a href="/article/1879.htm" title="Eclipse 问题 A resource exists with a different case" target="_blank">Eclipse 问题 A resource exists with a different case</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>在使用Eclipse进行开发的时候,出现了如下的问题: Description Resource Path Location TypeThe project was not built due to "A resource exists with a different case: '/SeenTaoImp_zhV2/bin/seentao'.&</div> </li> <li><a href="/article/2006.htm" title="编程之美-小飞的电梯调度算法" target="_blank">编程之美-小飞的电梯调度算法</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> public class AptElevator { /** * 编程之美 小飞 电梯调度算法 * 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。 * 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。 * 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。 * 问:电梯停在哪</div> </li> <li><a href="/article/2133.htm" title="SQL注入相关概念" target="_blank">SQL注入相关概念</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 首先让我们了解什么时候可能发生SQ</div> </li> <li><a href="/article/2260.htm" title="[光与电]光子信号战防御原理" target="_blank">[光与电]光子信号战防御原理</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%8E%9F%E7%90%86/1.htm">原理</a> <div>       无论是在战场上,还是在后方,敌人都有可能用光子信号对人体进行控制和攻击,那么采取什么样的防御方法,最简单,最有效呢?       我们这里有几个山寨的办法,可能有些作用,大家如果有兴趣可以去实验一下       根据光</div> </li> <li><a href="/article/2387.htm" title="oracle 11g新特性:Pending Statistics" target="_blank">oracle 11g新特性:Pending Statistics</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/dbms_stats/1.htm">dbms_stats</a> <div>oracle 11g新特性:Pending Statistics 转 从11g开始,表与索引的统计信息收集完毕后,可以选择收集的统信息立即发布,也可以选择使新收集的统计信息处于pending状态,待确定处于pending状态的统计信息是安全的,再使处于pending状态的统计信息发布,这样就会避免一些因为收集统计信息立即发布而导致SQL执行计划走错的灾难。 在 11g 之前的版本中,D</div> </li> <li><a href="/article/2514.htm" title="快速理解RequireJs" target="_blank">快速理解RequireJs</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/requirejs/1.htm">requirejs</a> <div>RequireJs已经流行很久了,我们在项目中也打算使用它。它提供了以下功能: 声明不同js文件之间的依赖 可以按需、并行、延时载入js库 可以让我们的代码以模块化的方式组织 初看起来并不复杂。 在html中引入requirejs 在HTML中,添加这样的 <script> 标签: <script src="/path/to</div> </li> <li><a href="/article/2641.htm" title="C语言学习四流程控制if条件选择、for循环和强制类型转换" target="_blank">C语言学习四流程控制if条件选择、for循环和强制类型转换</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a> <div># include <stdio.h> int main(void) { int i, j; scanf("%d %d", &i, &j); if (i > j) printf("i大于j\n"); else printf("i小于j\n"); retu</div> </li> <li><a href="/article/2768.htm" title="dictionary的使用要注意" target="_blank">dictionary的使用要注意</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/IO/1.htm">IO</a> <div>NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: user.user_id , @"id", user.username , @"username", </div> </li> <li><a href="/article/2895.htm" title="Android 中的资源访问(Resource)" target="_blank">Android 中的资源访问(Resource)</a> <span class="text-muted">finally_m</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/String/1.htm">String</a><a class="tag" taget="_blank" href="/search/drawable/1.htm">drawable</a><a class="tag" taget="_blank" href="/search/color/1.htm">color</a> <div> 简单的说,Android中的资源是指非代码部分。例如,在我们的Android程序中要使用一些图片来设置界面,要使用一些音频文件来设置铃声,要使用一些动画来显示特效,要使用一些字符串来显示提示信息。那么,这些图片、音频、动画和字符串等叫做Android中的资源文件。 在Eclipse创建的工程中,我们可以看到res和assets两个文件夹,是用来保存资源文件的,在assets中保存的一般是原生</div> </li> <li><a href="/article/3022.htm" title="Spring使用Cache、整合Ehcache" target="_blank">Spring使用Cache、整合Ehcache</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a><a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%40Cacheable/1.htm">@Cacheable</a> <div>Spring使用Cache            从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的</div> </li> <li><a href="/article/3149.htm" title="当druid遇上oracle blob(clob)" target="_blank">当druid遇上oracle blob(clob)</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>http://blog.csdn.net/renfufei/article/details/44887371 众所周知,Oracle有很多坑, 所以才有了去IOE。 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的。【如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑】 用Druid连接池,通过JDBC往Oracle数据库的</div> </li> <li><a href="/article/3276.htm" title="easyui datagrid pagination获得分页页码、总页数等信息" target="_blank">easyui datagrid pagination获得分页页码、总页数等信息</a> <span class="text-muted">ldzyz007</span> <div>var grid = $('#datagrid');  var options = grid.datagrid('getPager').data("pagination").options;  var curr = options.pageNumber;  var total = options.total;  var max =</div> </li> <li><a href="/article/3403.htm" title="浅析awk里的数组" target="_blank">浅析awk里的数组</a> <span class="text-muted">nigelzeng</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/array/1.htm">array</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/awk/1.htm">awk</a> <div>awk绝对是文本处理中的神器,它本身也是一门编程语言,还有许多功能本人没有使用到。这篇文章就单单针对awk里的数组来进行讨论,如何利用数组来帮助完成文本分析。   有这么一组数据:   abcd,91#31#2012-12-31 11:24:00 case_a,136#19#2012-12-31 11:24:00 case_a,136#23#2012-12-31 1</div> </li> <li><a href="/article/3530.htm" title="搭建 CentOS 6 服务器(6) - TigerVNC" target="_blank">搭建 CentOS 6 服务器(6) - TigerVNC</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>安装GNOME桌面环境 # yum groupinstall "X Window System" "Desktop" 安装TigerVNC # yum -y install tigervnc-server tigervnc 启动VNC服务 # /etc/init.d/vncserver restart # vncser</div> </li> <li><a href="/article/3657.htm" title="Spring 数据库连接整理" target="_blank">Spring 数据库连接整理</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a> <div>1、数据库连接jdbc.properties配置详解   jdbc.url=jdbc:hsqldb:hsql://localhost/xdb   jdbc.username=sa   jdbc.password=   jdbc.driver=不同的数据库厂商驱动,此处不一一列举   接下来,详细配置代码如下:    Spring连接池    </div> </li> <li><a href="/article/3784.htm" title="Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常" target="_blank">Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常</a> <span class="text-muted">xp9802</span> <div>用Dom4J解析xml,以前没注意,今天使用dom4j包解析xml时在xpath使用处报错      异常栈:java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常       导入包 jaxen-1.1-beta-6.jar 解决; &nb</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>