Linux命令补充及Shell编程

Linux命令补充:

Shell脚本:

一、入门

1.脚本格式:以#!/bin/bash开头(指定解析器)

2.脚本的常用执行方式:

(1)bash/sh + 脚本的相对路径或绝对路径(不用赋予脚本+x 权限)

(2)输入脚本的绝对路径或相对路径(必须具有可执行权限+x)

(3)其他方法

二、变量

1.系统预定义变量

(1)查看系统变量的值:echo $HOME

(2)显示当前shell中所有的变量:set

2.自定义变量

(1)定义变量:变量名=变量值(等号前后不能有空格)

(2)撤销变量:unset 变量名

(3)声明静态变量:randonly 变量,不能 unset

注意:(1)变量的值如果有空格,需要使用双引号或单引号阔起来

(2)可把变量提升为全局环境变量,可供其他shell程序使用: export 变量名

3.特殊变量

(1)$n:n为数字,$0表示该脚本名称,$1-$9代表第一到第九个参数,十以上的参数用大括号包含,如${10}

(2)$#:获取所有输入参数个数,常用于循环,判断参数个数是否正确

(3)$*:代表命令行中所有的参数,把所有的参数看成一个整体

(4)$@:代表命令行中所有的参数,把每个参数区分对待

(5)$?:最后一次执行的命令的返回状态,如果为0,则说明上一个命令正确执行,非0则说明命令执行不正确。

三、运算符

1.基本语法:$((运算式))或$[运算式]

如:S=$[(2+3)*4]

        echo $S

四、条件判断

1.基本语法

(1)test condition

(2)[ condition ](注意condition前后要有空格)

注意:条件非空即为true

2.常用判断条件

(1)两个整数之间比较

-eq 等于        -ne 不等于        -lt 小于        -le 小于等于        -gt 大于        -ge 大于等于

如:[ 23 -gt 24 ]        #23是否大于24

注:如果是字符串之间的比较,用等号"="判断相等;用“!=”判断不等

(2)按照文件权限进行判断

-r:可读        -w:可写        -x:可执行

如:[ -w helloworld.sh ]        #helloworld.sh是否具有写权限

(3)按照文件类型进行判断

-e:文件存在        -f:文件存在并且是一个常规的文件        -d:文件存在且是一个目录

如:[ -e /home/user/cls.txt ]        #/home/user/cls.txt目录中的文件是否存在

(4)多条件判断(&&表示前一条命令执行成功时才执行后一条命令,||表示上一条命令执行失败后,才执行下一条命令)

如:[  ] && echo OK || echo notOK

五、流程控制

1.if判断-基本语法

(1)单分支

if [ 条件判断式 ];then
    程序
fi
if [ 条件判断式 ]
then 
    程序
fi

(2) 多分支

if [条件判断式]
then
    程序
elif [条件判断式]
then
    程序
else
    程序
fi

注意:(1)[ 条件判断式 ],中括号和判断式之间必须有空格

(2)if后要有空格 

2.case 语句-基本语法

case $变量名 in
"值1")
    如果变量的值等于值1,则执行程序1
;;
"值2")
    如果变量的值等于值2,则执行程序2
;;
    ...省略其他分支...
*)
    如果变量的值都不满足,则执行程序
;;
esac

注意:(1) case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束

(2)双分号“;;”表示命令序列结束,相当于break

(3)最后的“*)”表示默认模式,相当于default

3.for循环

(1)基本语法

for((初始值;循环控制条件;变量变化))
do
  程序  
done
for 变量 in 值1 值2 值3… 
do
    程序
done

4.while循环

(1)基本语法

while [条件判断式]
do 
    程序
done

案例:从1加到100 

六、read读取控制台输入 

1.基本语法:read [ -p -t ] 读取值的变量名

-p:指定读取值时的提示符

-t:指定读取值时等待的时间,如果不加则表示一直等待

七、函数

1.系统函数-basename

(1)基本语法:basename [string/pathname] [suffix]

功能:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。相当于取路径里的文件名称。

选项:suffix为后缀,如被指定,则basename会将pathname或string中的suffix去掉。

2.系统函数-dirname

(1)基本语法:dirname 文件绝对路径

功能:取文件路径的绝对路径名称

3.自定义函数

(1)基本语法:

[ function ] funname [ () ]
{
    Action;
    [ return int; ]
}

注:函数返回值,只能通过$?系统变量获得,可以显示加return 返回,如果不加,将以最后一条命令运行结果作为返回值。return后跟数值n(0-255)。

八、正则表达式入门 

1.作用:通常用于检索、替换那些符合某个模式的文本。

2.常规匹配:一串不包含特殊字符的正则表达式匹配自己本身。

3.常用特殊字符:

(1)^:匹配一行的开头

如:cat /etc/passwd | grep ^a   (会匹配出所有以a开头的行)

(2)$:匹配一行的结束

如: cat /etc/passwd |grep t$    (会匹配所有以t结尾的行)

注:^$匹配的是空

(3)  .  :匹配一个任意的字符

如: cat /etc/passwd |grep r..t    (会匹配包含tabt、rbbt、root等的所有行)

(4)* :不单独使用,和上一个字符连用,表示匹配上一个字符的0次或多次

如:cat /etc/passwd |grep ro*t     (会匹配rt、rot、root、rooot等所有行)

注:.*匹配任意字符零次或多次

(5)字符区间 [ ] :表示匹配某个范围内的一个字符

如:[6,8]:匹配6或8        [0-9]:匹配一个0-9的数字

[0-9]*:匹配任意长度的数字字符串        [a-z]:匹配任意长度的字母字符串

[a-c,e-f]:匹配a-c或者e-f之间的任意字符

(6)\ :表示转义,并不会单独使用。将转义字符与特殊字符连用,来表示特殊字符本身

如:cat /etc/passwd |grep 'a\$b' (匹配包含a$b的所有行)

注意需要用单引号将表达式引起来。

九、文本处理工具

1.cut:从文件的每一行剪切字节、字符和字段并将其输出

(1)基本用法:cut [ -f -d -c ] filename

默认分隔符为制表符

(2)选项参数

-f:列号,提取第几列

-d:分隔符,按照指定分隔符分割列(默认为\t)

-c:按字符进行切割,后加n表示取第几列 ,如 -c 1

2.awk:把文件逐行读入,以空格为默认分隔符将每行切片,切开部分在进行分析处理

(1)基本用法:

awk [ -F -v ]  '/pattern1/{action1}  /pattern2/{action2} ...'  filename

pattern:表示awk在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

(2)选项参数:

-F:指定输入文件的分隔符

-v:赋值一个用户定义变量

如:只显示/etc/passwd的第一列和第七列,以逗号分隔,且在所有行前面加列名user,shell,在最后一行添加end。

awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "end"}' passwd

其中$1和$7分别表示第一列和第七列 。

如:将passwd文件中用户id增加数值1并输出

awk -v i=1 -F : '{print $3+i}' passwd

      注意:(1)只有匹配了pattern的行才会执行action

                 (2)BEGIN在所有数据读取行之前执行,END在所有数据执行后执行

(3)awk的内置变量:

FILENAME:文件名

NR:已读的记录数(行号)

NF:浏览记录的域的个数(切割后列的个数)

如:查询ifconfig命令输出结果中的空行所在的行号

ifconfig | awk '/^$/{print NR}'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值