常用的shell

语法

流控制

if

if是流控制重要的语法,通常用于对字符串判断,对文件和变量的一些判断等。常用”[]”表示。注意shellif语法有一个”坑”那就是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
    echo $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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值