首页 > 代码库 > 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临时笔记