Linux Shell脚本

变量:  全局变量 ---- 环境变量

             局部变量 ----本地变量

             变量名 = 变量值   VAR = 10

对比:

$变量名 : 取变量的值

${变量名} : 取变量的值(更安全)

$(命令):取命令执行结果

$((变量名)) :对变量执行算术运算

$[变量名] : 对变量执行算术运算

导出:export  

export 功能说明:设置或显示环境变量。
语  法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。
参  数:
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。

删除:unset

* ? [0123456789] [0-9]

命令代换:$()==` `   VAR=`date`

算数代换:$(( ))==$[ ]

转义字符:\ 转特殊意,转本身意

                   --  例如创建文件名为 --abc的文件  touch  --  --abc

单引号:括字符串不能展开变量

双引号:括字符串可以展开变量

例如:var='date'

echo '$var' 会输出$var 而echo "$var"会输出当前日期

反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。

反引号是一个老的用法,$()才是新的用法

控制语句

条件判别表达式:真:0   假 :1

test  测试条件 

[ 空格  测试条件] 

例如:

var=10              

test  $var  -gt  100      或者   [ $var  -gt  100 ]

echo  $?

输出 1

文件类别判别符:

      -d  目录文件

     -f  普通文件

     -p  管道

     -l  软连接

    -c  字符设备

     -b  块设备

     -s  socket

字符长度判断:

       -z    空字符串(长度0)

      -n    非空字符串

字符串判等: = 相等  !=不等

逻辑运算:  a   相当于&&   逻辑与

                    o    相当于||   逻辑或

                    !  逻辑非

if 判断条件

if  [判断条件];then

     执行内容

elif  [判断条件];then

      执行内容

else  

      执行内容

fi

case分支语句

for循环

while循环

位置参数和特殊变量

重定向

函数

   函数名(){

       函数体  

    }

函数传参: 函数名   参数1  参数2  ......

             函数外      :$0    -----命令行参数的 argv[0]

                                  $1-$N  命令行参数的 argv[1-N]

              函数内     :$0    -----命令行参数的 argv[0]

                                 $1-$N  函数的参数[1-N]

#! /bin/bash

f1(){
  echo $0
  echo $1
  echo $2
  echo $3
}


echo $0
echo $1
echo $2
echo $3

echo  "---start---"
f1 11 22  33
echo  "---end----"

 

Shell调试命令

 

正则表达式

    字符类使用的符号:

               .    匹配一个字符

               *    匹配多个字符

               []   匹配指定范围字符

               -    在[]内,设定范围

               ^   在[]内,匹配除该符号后的其他字符  

   数量限定符

     位置限定符

basic正则和extend正则

baseic正则中字符?+{}|()等应解释为普通字符,要表示上述含义需加\转义;

egrep '正则表达式'  xxx  = grep -E ‘正则表达式’  xxx  =grep '含\转义的正则表达式'  xxx 

grep  找文本   -r  递归

find  找文件

        -name           find / -name "init"

        -size              find / -size +3M  -size -7M

        -type              -d/-f/-p/-l/-s/-c/-b

        -maxdepth      find  / -maxdepth 1 -type d       (目录层级)

        -exec              find ./ -maxdepth 1 -type d  -exec ls -ld {}\;     (find不能直接用管道|)

        -ok                  find ./ -maxdepth 1 -type d  -ok  rm -rf {}\;     交互版的 -exec

        -xargs             find ./ -maxdepth 1 -type f  | xargs  ls -ld 

        -print               touch test\ test.c  生成 "test test.c"

                               find ./ -maxdepth 1 -type f  -print0 | xargs  -0  ls -ld

        -atime|ctime|mtime:天为单位

                 a:访问         c:内容修改       m:属性修改

        -amin|cmin|mmin:分钟为单位

                  find ./  -name "syslog*"  -mtime +5 -exec ls -l {} \;   (+5五天以外   -5五天以内) 

有时对于没有查询权限的目录会出现Permission denied ,有一大坨, 不容易看到正确的查询结果, Permission denied 属于错误,将错误重定向走即可:

find [path] -name "pattern " 2>/dev/null

 

sed常用命令(-i表示对源文件操作,否则对缓存操作)

删除包含test的行
sed -i '/test/d' etc/test

替换hehe为haha
sed -i 's/hehe/haha/g' tmp.txt

sed -i '1,10s/hehe/haha/g' tmp.txt  1到10行替换

将含有xhn的行中的str1替换为str2

sed -i '/xhn/s/hehe/haha/g' tmp.txt

将<html><head><body>Hello World ! </body></head></html>标签去掉

sed 's/<[^>]*>//g' html.txt

在第二行添加haha,最后的\n是换行符
sed -i "2 a haha\n" tmp.txt

 

打印用户账号列表

sudo awk 'BEGIN {FS=":"} {print $1}'  /etc/passwd

统计文件空行数

awk '/^ *$/ {x=x+1} END {print x;}'  testfile

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值