您的位置:首页 > 运维架构 > Shell

常用的shell

2016-07-21 14:06 260 查看
语法
流控制
if

管理员操作
新增用户
adduser

切换用户
su

工具
文件目录操作
cp

参数处理
xargs

匹配问题
grep

数值计算
shell 加法

文件操作
tar打包

字符串操作
字符串拼接

将字符串连续输入一个文件

语法

流控制

if

if
是流控制重要的语法,通常用于对字符串判断,对文件和变量的一些判断等。常用”[]”表示。注意
shell
if
语法有一个”坑”那就是
if
[]
之间一定要有个空格。

下面是
if
语法的一个基本结构

if [ condition ];then
...
elif [ condition ];then
...
else
...
fi


举例
if
经常使用的条件:

[ -f "somefile" ]: 判断是否是一个文件
[ -x "/bin/ls" ]: 判断/bin/ls是否存在,并且是否可执行
[ -n "$var" ]:判断$var是否设置
[ "$a" = "$b" ]:判断ab两个变量是否相等


通常用到逻辑判断

-r/x/w :检测读/写/执行权限

-f/d :检测是否为文件/目录,或文件/目录是否存在

-ne : not equal不相等为真

-lt: less than 小于

-le:less equal 小于等于

-gt: great than大于

-ge:great equal 大于等于

练习:如何利用shell遍历一个目录

for file in `ls .`
do
if [ -d $file ];then
echo "fine dir $file"
elif [ -f $file ];then
echo "file file $file"
fi
done


管理员操作

新增用户

adduser

切换用户

su

su命令主要需要注意一点,即su - user、su user

的区别,前者会进入一个新的环境,而后者会使用现在的环境

工具

文件目录操作

cp

cp -b //同名,备份
cp -f //强制复制文件
cp -r //递归方式复制文件


参数处理

通常我们会利用管道对参数进行传递,
cmd | cmd
的形式。However,我们很多时候需要对参数进行划分,比如第一个
cmd
传入20个参数,但是第二个cmd每次需要2个参数。这就尴尬了。

xargs

从名字就可以看出
xargs
是对参数进行处理的工具。使用方法很简单。

cmd | args


例子:

cat example.txt
1 2 3 4 5
6 7
8
cat example.txt | xargs
1 2 3 4 5 6 7 8
cat example.txt | xargs -n 2
1 2
3 4
5 6
7 8


应用:我们通常可以利用xargs来配合其他命令组成一个强有力的工具。在编写程序是我们通常为bin配备一个启动脚本,这个脚本提供start ,stop,restart命令,其中restart命令就是stop和start的组合。start命令很简单,我们可以利用xargs写stop命令。

ps -fe | grep proc_name | awk '{print $2}' | xargs kill -9


匹配问题

grep

grep是shell中的重要工具,很多时候我们都会利用grep来进行查找,过滤等操作。在这个过程中我们往往还需要一些其他的操作来辅助。比如:利用grep查看答应匹配的后面几行或者前面几行

这个命令也是相当简单:

grep -5 'pattern' inputfile#打印匹配的前后5行
grep -A 5 'pattern' inputfile#打印匹配的后5行(after)
grep -B 5 'pattern' inputfile#打印匹配的前5行(before)
grep -C 5 'pattern' inputfile#打印匹配的前后5行(context)


数值计算

shell 加法

1、使用
let


a="1"
let b=$a+1
e
4000
cho $b


2、使用
expr


a="1"
b=`expr $a + 1`
echo $b


3、使用多个
$


a="1"
b=$(($a + 1))
echo $b


文件操作

tar打包

一般来说打包和压缩是一起使用的,打包指令:

tar [-cstz|vfpPN] 文件与目录


参数:

表示打包还是解包

-c : 建立一个文件(一般会用到,在打包时建立一个新文件),compress

-x:解压缩,解打包

-t:查看tarfile文件

以上三个参数只能存在一个

表示文件操作和打包过程操作

-z : 表示具有gzip属性(利用gzip压缩和解压)一般添加后缀
.gz


-j : 表示具有bz2属性,后缀添加
.bz2


-v : 在压缩和解压过程中显示其中文件

-f : 使用文档明,也就是说自己命名文档。注意:
f
后面直接跟文档名
所以
f
应该放在参数最后

-p : 使用文档原来的属性

-P : 按照绝对路径来压缩!

-N:比后面接的日期(yyyy/mm/dd)新的文档才会被压缩

–exclude file :不要将file压缩

一般比较常用的是:

压缩

tar -cvf file.tar file  //打包
tar -zcvf file.tar.gz file //gzip压缩
tar -jcvf file.tar.bz2 file //bzip2压缩


字符串操作

字符串拼接

str1=abc
str2=def
str3=${str1}${str2}
echo $str3


将字符串连续输入一个文件

今天遇到这样一个情况:需要将日志输出到文件,但是直接使用

echo "log messages" > file


会出现一个问题:每次输入都会覆盖上一次的文件,在简单的百度之后,我发现了其实很容易解决

echo "log messages" >> file
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell