shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程
Reference:
http://saiyaren.iteye.com/blog/1943207
1.
Shell
读取文件和写文件
for line in $(<top30000.url.utf-8.http_server_front_hphp.txt); do
tmp_port=8080;
for((i=0;i<=7;i++));do
echo ${line/192\.168\.12\.63/192\.168\.12\.63:$tmp_port} >>top30000.url.utf-8.http_server_front_hphp_mul_port.txt;
tmp_port=$[tmp_port+1]
done;
done;
top30000.url.utf-8.http_server_front_hphp.txt
文件名
通过
< 读取文件
line 是每行的内容
替换文件内容
:
${
变量 /
被替换内容 /
替换内容 }
替换两边的一定要注意是
{} 不是小括号
输出文件:
echo “xxxx” >
文件名
追加输出文件:
echo “xxxx” >>
文件名
第二种读取方式:
$ cat file | while read line; do echo $line; done
例:
$ cat /root/test.txt | while read line; do
echo $line;
done
输出是:
aaaa
bbbb
cccc dddd
for
的是分割输出
$ for line in $(<file); do echo $line; done
aaaa
bbbb
cccc
dddd
2.
shell
参数
sh test.sh 111 222 333
然后再
shell 中获取参数如下获取,如:
$1
是第一个参数 111
$2
是第二个参数 222
$3
是第三个参数 333
依次类推
$0
是 shell
本身
3.
Shell if
用法
if [ $1 == "aaa" ]; then
echo $line
fi
if
后需要有空格
[
需要有空格
$1
后需要有空格
==
后需要有空格
“aaa”
后需要有空格
]
后需要有分号 (;)
;
号后有空格
如果不按照规则,那么会出现如下错误
syntax error near unexpected token `fi'
或是 then
的
shell
的 if else
用法:
if ....; then
....
elif ....; then
....
else
....
fi
当运行下面脚本时,如果
if 后的
$a 不加引号,则会报:
test.sh: line 5: [: too many arguments
这个错误;所以需要先加上“”编程字符串
a="hhvm don't run"
echo $a
if [ "$a" == "hhvm don't run" ]; then
echo "============"
fi
4.
shell
分割字符串
#!/bin/bash
str="hello,world,i,like,you,babalala"
arr=(${str//,/ })
for i in ${arr[@]}
do
echo $i
done
分割成数组
arr ,用逗号分割
方法
2 :
$ cat split.sh
#!/bin/sh
# Script to split fields into tokens
# Here is the string where tokens separated by colons
s="first column:second column:third column"
ip_arr=()
IFS=":" # Set the field separator
set $s # Breaks the string into $1, $2, ...
i=0
for item # A for loop by default loop through $1, $2, ...
do
ip_arr=("${ip_arr[@]}" "$item")
echo "Element $i: $item"
((i++))
done
5.
Shell
获取数组长度
array=(bill chen bai hu);
num=${#array[@]}
遍历数组:
for((i=0;i<num;i++))
do
echo ${atrr[$i]};#
这里需要用 {}
引用上才可以
done;
6.
shell
创建空文件
:>input_ware_data.txt;
7.
Shell
执行命令后给变量赋值
$a=`pwd`;
echo $a
这样就可以输出
pwd 的返回值了
注意这里的引号是键盘
1 左边的那个按钮
8.
使用
wget 和
curl 时出错需要用引号引用
URL
使用
wget 和
curl 时需要用引号引用住
URL
Wget –SO
文件名 “www.baidu.com”
Curl “www.baidu.com”
9.
Shell
累加
c=0
for((i=0;i<10;i++));do
#c++;
: $[c++]
echo $c;
done;
这样去实现累加:
: $[c++]
冒号和
$ 之间要有空格
10.
Shell
整除
c=90010
echo $((c/1000))
输出
90
11.
Shell
赋值
i=$((c/1000));
赋值语句前后不能有空格
12.
Shell
多进程
for ((i=0;i<5;i++));do
} &
&
shell
13.
执行语句后面加上
2>/dev/null 就可以清楚系统的输出信息
如:
Curl www.baidu.com 2>/dev/null
这样就不会输出提示信息了
14.
Shell
创建文件夹
mkdir –p [
文件夹 ]
-p
是递归创建
15.
shell
获取时间戳
参考网址:
http://www.2cto.com/os/201109/105312.html
当前时间戳:(年月日时分秒)
a=`date +%Y%m%d%H%M%S`
echo $a;
前
6 天时间戳:(年月日时分秒)
a=`date -d "-6 day" +%Y%m%d%H%M%S`
echo $a;
-d
中可以是 hour , day,week
16.
Shell
数组
A=(a b c def)
for i in "${A[@]}"; do
echo $i
done
#
输出 A
的下标
echo ${A[1]}
参考:
http://doudouclever.blog.163.com/blog/static/17511231020127288621354/
17.
获取输入参数数组
for i in "$@"; do
echo $i
done
$@
是获取的输入参数的数组, $i
是获取的输入的每个参数的值
如
test.sh 1 2 33
输出的内容为:
1
2
33
这就是获取到的
3 个输入参数,输入多少个参数都可以
18.
Find
遍历 删除
for file in `find . -name "Runtime"`;do
echo "$file==========="
rm -rf $file/*;
ls -l $file;
done;
19.
shell
求余
i=$((2000%1000));
echo $i;
用
% 求余
20.
Shell
字符串连接
a=”aa”;
a=$a"bb";
echo $a;
输出是
aabb
21.
Shell
抽取字符 awk
如日志是这样的:
14.245.173.44 - - [25/Apr/2013:22:24:13
+0800] "GET
/ProductPageService.aspx?method=GetCommentSummaryBySkuId&referenceId=1008195527&callback=getCommentCount
HTTP
每个空格就是一个位置,那么抽取
/ProductPageService.aspx?method=GetCommentSummaryBySkuId&referenceId=1008195527&callback=getCommentCount
这个就是第
7 位
awk '{print $7}' clubservice_aspx.log >cbs.log
抽取文件
clubservice_aspx.log ,然后输出到
cbs.log
中
详细的见下面的
url
http://hi.baidu.com/ziyingshaozhu/item/8473541d9cf6028488a95681
22.
shell
按行切割文件
#
按每个文件
1000 行来分割除
split -l 1000 httperr8007.log httperr
split -l
行数 切割的文件
生成文件前缀
详细见:
http://blog.sina.com.cn/s/blog_62db9b1901017aiz.html
23.
查找目录下的所有文件
a=`ls cbs`
#echo $a
for file in $a;do
echo $file
done
24.
shell
判断为空
1. 变量通过
" " 引号引起来
如下所示 :
,可以得到结果为 IS NULL.
#!/bin/sh
para1=
if [ ! -n "$
echo "IS NULL"
else
echo "NOT NULL"
fi
if [ -z $para1 ];then
echo “is null”
fi
2. 直接通过变量判断
如下所示 :
得到的结果为 : IS NULL
#!/bin/sh
para1=
if [ ! $para1 ]; then
echo "IS NULL"
else
echo "NOT NULL"
fi
3. 使用
test 判断
得到的结果就是
: dmin is not set!
#!/bin/sh
dmin=
if test -z "$dmin" then
echo "dmin is not set!"
else
echo "dmin is set !"
fi
4. 使用
"" 判断
#!/bin/sh
dmin=
if [ "$dmin" = "" ]; then
echo "dmin is not set!"
else
echo "dmin is set !"
fi
详细查看
http://blog.csdn.net/runming918/article/details/7226507
25.
shell
逻辑运算符
一、逻辑运算符
逻辑卷标 |
表示意思 |
1. |
关于档案与目录的侦测逻辑卷标! |
-f |
常用!侦测『档案』是否存在 |
-d |
常用!侦测『目录』是否存在 |
-b |
侦测是否为一个『 block |
-c |
侦测是否为一个『 character |
-S |
侦测是否为一个『 socket |
-L |
侦测是否为一个『 symbolic link |
-e |
侦测『某个东西』是否存在! |
2. |
关于程序的逻辑卷标! |
-G |
侦测是否由 GID |
-O |
侦测是否由 UID |
-p |
侦测是否为程序间传送信息的 |
3. |
关于档案的属性侦测! |
-r |
侦测是否为可读的属性 |
-w |
侦测是否为可以写入的属性 |
-x |
侦测是否为可执行的属性 |
-s |
侦测是否为『非空白档案』 |
-u |
侦测是否具有『 SUID |
-g |
侦测是否具有『 SGID |
-k |
侦测是否具有『 sticky bit |
4. |
两个档案之间的判断与比较 |
-nt |
第一个档案比第二个档案新 |
-ot |
第一个档案比第二个档案旧 |
-ef |
第一个档案与第二个档案为同一个档案( |
5. |
逻辑的『和 (and) |
&& |
逻辑的 AND |
|| |
逻辑的 OR |
运算符号 |
代表意义 |
= |
等于 |
!= |
不等于 |
< |
小于 |
> |
大于 |
-eq |
等于 |
-ne |
不等于 |
-lt |
小于 |
-gt |
大于 |
-le |
小于或等于 |
-ge |
大于或等于 |
-a |
双方都成立( and |
-o |
单方成立( or |
-z |
空字符串 |
-n |
非空字符串 |
参考网址:
http://www.cnblogs.com/chengmo/archive/2010/10/01/1839942.html
26.
curl
引用 cookie
curl –b test=”aaa” http://club.jd.com
-b name=”value”
Test
是 name
Aaa
是 value
27.
查看进程使用物理内存
Ps aux|grep xxx
查询出
pid
比如
pid 是
11460 那么查询物理内存就如下:
cat /proc/11460/status|grep VmRSS
返回结果:
VmRSS: 190332 kB VmRSS: 190332 kB
28.
Grep
不区分大小写
grep –i “aaa”
29.
awk
分割字符串
a.
log
中的信息为:
a:1
b:2
c:3
…..
然后通过
: 分割,那么
a,b,c 就是
$1;1,2,3 就是
$2
写法如下:
-F 后面写上分割的符号
cat a.log|awk -F ':' '{print $1}'
30.
查看线程
ps -eLf|grep hhvm
31.
shell
提示符,输入内容进行选择
如提示内容,然后输入
yes no 等等的,然后进入不同分支
while true;do
#stty -icanon min 0 time 100
echo -n "Automatic execute ten seconds after,Are you sure you want to start the task(yes or no)?"
read Arg
case $Arg in
c)
echo "cc"
exit;;
Y|y|YES|yes)
break;;
N|n|NO|no)
exit;;
"") #Autocontinue
break;;
esac
done
echo
echo "others function..."
32.
curl
获取 http
状态
http_status=`curl -s -w %{http_code} -o /dev/null -e $REFERER_URL "$line" 2>/dev/null `;
-s
是清楚垃圾信息;
-w
33.
Cp
强制覆盖
yes|cp a.txt /export/
用管道线默认确认提示
shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程的更多相关文章
- 通过PHP来 获取文件内容 并且分割字符串 呈现在表格中
<?php $aaa = file_get_contents("names.txt"); $data = explode("\n", $aaa); for ...
- sp_executeSql 用法 执行有参数的sql字符串 出现必须声明标量变量 "@XXX"。
今天遇到了一个难题 就是把 一个拼接sql语句 的返回值 赋值给一个变量 经研究 要用sp_executeSql这个存储过程 据说是从sql 2005才开始有的 代码如下: declare @str ...
- Go 中读取命令参数的几种方法总结
前言 对于一名初学者来说,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算. 本文讲述使用三种方式讲述 Go 语言如何接受命令行参数 ...
- Java开发笔记(三十七)利用正则串分割字符串
前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...
- Oracle分割字符串 REGEXP_SUBSTR用法
分割字符串中所有指定字符,然后成多行参数说明,参数1: 待分割字符串参数2:正则表达式参数3:起始位置,从第几个字符开始正则表达式匹配(默认为1)参数4:标识第几个匹配组,默认为1参数5:模式('i' ...
- java里如何实现循环打印出字符串或字符串数组里的内容
不多说,直接上干货! java里如何实现循环打印出字符串里的内容 思路:可以先将字符串转换成字符串数组. public class test { public static void main(Str ...
- LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
//file_op.c #include <string.h> #include <stdio.h> #include <stdlib.h> struct info ...
- 通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题
今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述: 目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到s ...
- shell脚本读取文件+读取命令行参数+读取标准输入+变量赋值+输出到文件
读取url_list文件批量下载网页 url_list http://www.tianyancha.com/company/2412078287 http://www.4399.com/special ...
随机推荐
- h5页面在不同ios设备上的问题总结
1.日期问题 对于yyyy-mm-dd hh:mm:ss 这种格式在ios系统不识别 时间格式化的时候,在浏览器端处理好好的,到了手机端,就变成NAN,或者null,这种情况,是ios系统不能转化这种 ...
- [转]Java多线程
一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌 ...
- 修改数组中对象的key值
遇见场景:echart图表中后台返回我的数据,后台无法修改key值,但是echart渲染图表的时候,需要用 var m2R2Data= [ {value:335,name:"种类01 335 ...
- vue 单纯的获取经纬度 百度与高德 H5
首先用百度的api举个例子 首先在index页面引入如下: <script type="text/javascript" src="http://api.map.b ...
- some方法过滤
// 已经存在该tab时跳过 this.tabs.some(item => item.title === option.title) || this.tabs.push(option)
- 扩展IEnumerable<T> ForEach()方法
相信很多人,在用Linq时,都会困惑为什么IEnumerabel<T>没有ForEach,虽然 我们一样可以这样写,很快读写 foreach(item in items) { Cons ...
- windows 可执行文件分析
windows可执行文件是什么? 是具有PE文件格特性的文件,例如:.exe.dll.ocx等文件. 注:(这里只是让大家能明了一些,其实,可执行与否,和后缀没有什么关系,后缀只是windows方便管 ...
- 03. 将pdb调试文件包含到.vsix包中
vs插件如何把pdb文件打包进去,方便记录日志和调试 <PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLoc ...
- GCC 参数详解
转载出处:http://blog.csdn.net/yff1030/article/details/8592077 原文:http://www.cppblog.com/SEMAN/archive/20 ...
- jun引导1.04可以让N3050支持6.2
1.03引导用在3050可以安装 但是安装后找不到dsm 需要手动插拔电源才可以解决 偶尔还会死机 1.04可以引导3050安装6.2 23739 安装24922正常,但是moments传照片后会死机 ...