首页 > 代码库 > shell临时笔记

shell临时笔记

-eq 等于

-ne 不等于

-gt 大于

-ge 大于等于

-lt 小于

-le 小于等于

 

seq 1 30  从1到30的数字

touch -mt201003030303.03 $Dir    修改目录的时间格式

stat /tmp/1.dir                   查看修改时间


LINES=`grep ‘^#‘ $file |wc -l`

echo "$file:$LINES"           //可以用多个变量   取结果要用``赋值给变量



cat file.txt |tr -s ‘\n‘    将多个连续的字符压缩成单个字符


cat -n 显示行号


cat file.txt |xargs -n 3    每行最大值为3个

line  line  line

line   line  line

line  line



tr 可以进行替换,删除,压缩

tr ‘1‘ ‘2‘ 第一部分的被第二部分替换

echo "Hello who Is This" |tr ‘A-M,n-z‘ ‘a-m,N-Z‘ 大写A-M n-z 替换成a-m,N-Z


tr -d           删除字符

echo "hello 0980world" |tr -d ‘0-9‘

hello world


tr -c [set1][set2] 字符的补集   取反

echo -e "hello 0980 world" |tr -d -c ‘0-9\n‘

0980


tr -s    压缩字符  (将连续多个字符压缩成单个字符)


备份文件

cp file.txt /tmp/filebak.txt;rm -rf file.txt


###########mysql################

select concat(uid,‘@‘,cname) as email,nickname,mobile,createdate,passwd from mop2oxdatabases

意思就是把mop2oxdatabases库里面的uid字段,cname字段整合成email字段,提取每个字段时,中间用逗号隔开


mysql -uroot -p -h 10.101.120.38 -P 3308 mop -e " " 命令行上的操作



dd命令

dd if=/dev/zero of=anbaoyu.data bs=1M count=1

/dev/zero 是泡泡机(吐数据的)


修改文件的三个时间

touch -a     更改访问时间 

touch -mt    更改文件修改时间

touch -d     时间戳



while 循环语句


1 while read line

do

    echo $line

done<A.txt                 A只能为文件,读取文件的行


<A.txt写在最后相当于给 整个while do语句加了一个约束条件,读取A里每行至文件尾结束


2 while read line <A

do

    echo $line

done

<A写在前边,整个while do语句就没有了约束条件,因为read line<A,这个始终为真(显示第一行,死循环),表示不停的读取第一行,赋值给line,然后打印参数



3 awk 打印多行数据

ls -l |awk ‘{print $1 ":" $7}‘       $1  $7之间用:隔开


awk ‘NR==m,NR==n‘ filename      打印从第m行到n行的范围


4 要打印处于 ‘/start_pattern/,/end_pattern/‘ filename

例如:

$ cat section.txt

line with pattern1

line with pattern2

line with pattern3

line end with pattern4

line with pattern5


$ awk ‘/pa.*3/,/end/‘section.txt

line with pattern3

line end with pattern4


替换变量内容中的部分文本

$ var="this is a line of test"

$ echo ${var/line/REPLACED}

"this is a REPLACED of test"


查看网络上机器的状态


#!/bin/bash

network="192.168.1"

for sitenu in $(seq 1 100)

do

    (ping -c 1 -w 1 ${network}.${sitenu} &>/dev/null && echo ${network}.${sitenu} up || echo ${network}.${sitenu} down)&

done


&&前边执行成功的话,继续执行次操作

||前边执行失败的话,继续执行次操作

可以翻译成,如果1 ,那么2,否则3


原理()& 将任务放入后台操作;每次ping都非常慢,-w 延迟1秒

wait 放在脚本最后,它就会一直等到所有的子进程全部结束


netstat -tnp |grep 服务进程             列出开放端口与服务


统计硬盘使用情况

df -h      disk  free   磁盘使用情况

du -sh     usage       文件和目录大小

du -a dir  递归显示所有文件的磁盘使用情况


查找大文件

find . -type f -exec du -k {}\;|sort -nrk 1 |head

.当前目录

sort -nrk     -n 依照数值大小排序

              -r 相反的顺序排序

              -k   选那块区域进行排序

              -t   指定分隔符

              -f  忽略大小写

              -b  忽略每行前面开始出的空格字符


脚本中使用密码问题:

使用前expect前,需要安装两个rpm包,下载http://download.csdn.net/detail/wang7dao/4416172

# rpm -ihv expect-5.43.0-8.el5.i386.rpm

# rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm


#!/usr/bin/expect -f

set password 123456

#download

spawn scp root@192.168.1.218:/root/a.wmv   /home/yangyz/

set timeout 300

expect "root@192.168.1.218‘s password:"

set timeout 300

send "$password\r"

set timeout 300

send "exit\r"

expect eof


#upload

spawn scp /home/yangyz/abc.sql root@192.168.1.218:/root/test.sql 

set timeout 300 

expect "root@192.168.1.218‘s password:"

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

expect eof


#:expect a.sh



http://down.51cto.com/data/1866892



常用shell符号:



我们先写一个简单的脚本,执行以后再解释各个变量的意义

 

# touch variable

# vi variable

 

脚本内容如下:

 

#!/bin/sh

echo "number:$#"

echo "scname:$0"

echo "first :$1"

echo "second:$2"

echo "argume:$@"

echo "show parm list:$*"

echo "show process id:$$"

echo "show precomm stat: $?"

保存退出

 

赋予脚本执行权限

 

# chmod +x variable

 

执行脚本

 

# ./variable aa bb

number:2

scname:./variable

first:aa

second:bb

argume:aa bb

show parm list:aa bb

show process id:24544

show precomm stat:0

 

通过显示结果可以看到:

 

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误



shell 中调用另一个脚本的三种方法:


1 fork /directory/script.sh  如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父命令

(子命令环境变量不会影响到父级)

  运行的时候会开一个sub-shell的调用脚本



2 exec /directory/script.sh  执行子命令的命令后,不再执行父级的命令 



3 source /directory/script.sh  执行子级命令后继续执行父级命令,同时子级设置环境变量会影响到父级环境变量


 (调用的脚本中声明的变量和环境变量,都可以在主脚本中使用)


  


随记:

1 ^#   以#开头

  ^$   表示空格

  [[:space:]]   精确表示空格


2 set -x 跟踪执行     看到shell执行的过程


3 cp $file /tmp/$file-`date +%F`  复制文件并以当前时间改名


4 显示用户名,ID,shell时候

echo "user:$username   ID:$Uid   shell:$shell"

然后再分别给予变量赋值


过滤的时候

        a:可以用grep   关键字

        b:head -6 file |tail -1     第几行



cut -d : -f 3  

id -gn tom     显示tom用户的组名




8  @@@@重要


   列表的生成方式


a 逐个给出   /etc/fstab   /etc/inittab 

b 使用通配符   for  File  in  /var/*

c 使用命令生成列表   (一般为相对路径)

  #!/bin/bash

   for File in  `ls /var` ;do

      file /var/$File

   done

d 生成数字序列

{}:{起始数字..结束数字} 例如{1..100}表示从1到100之间的所有正整数

   `seq[起始数字][步长][结束数字]`

例:seq 1 2 100 表示从1到100之间以2个单位输出



8 for 循环是一个一个读取    循环次数是按照变量的个数循环的



9算术运算的实现方式:expression:运算方式

      $[expression]    例:echo $[$a+$b]  --------常用

      $((expression))   例:$(($a+$b))    

      let expression    例:letE=$a+$b  echo $E

      expr expression   例:F=`expr $a+$b`   


10  Count=0 


    Count=$[$Count+1]  


    echo "total file:$Count"          //文件的总和



11 `seq 1  2  100`      列表以奇数

    

    `seq 2  2  100`      列表以偶数


12  IDsum=0           id的总和

     

    Evensum=0          奇数的总和                     //变量的前提



    IDsum=$[$IDsum+$i]       $i是一个变量数字        //变量主体部分

                  

                   +1      就是递增的变化


    echo "$IDsum"       显示变量的总和                //变量的结果




shell临时笔记