shell编程入门

shell中的变量:

系统变量和用户自定义变量(linux使用set命令查看所有变量)

自定义变量:

格式:变量名=值

初始化变量时,可以使用双引号对空格脱意

x=“hello world”

使用$加变量名的方式调用一个变量

>>>$x

hello world

使用单引号将所有特殊字符进行脱意,所以在单引号的变量中不可以引用变量

>>>a='hello $x'

hello $x

shell编程中使用export 加变量名的方式,是一个变量成为全局变量,供其他程序调用

可以使用:变量名=`执行有输出的命令` 的方式将命令执行结果传给一个变量名或者使用变量名=$(执行有输出的命令)

特殊变量:

   $?--->表示上一个命令的返回值

   $n(n>=1)--->表示n位置传入的参数

   $0--->表示当前脚本名称

   $#--->表示参数的个数(常用于循环)

   $*/$@--->表示所有参数列表(常用于循环)

如果对这两个加双引号:$*会将所有参数看成一个字符串,而$@则仍然是把参数分开

循环结构:

for循环:

for 变量名(如i) in 循环的值或参数列表(如:$*)

do

    echo $i

done

while循环:

while [ boolean表达式 ]

do


done

选择结构:

if语句:

if [ 表达式 ]

then

    echo 'success'
【elif [ 表达式 ]
    then
    echo "ok"
else
    echo "no"】
fi

【】中的内容是可选项

case语句:

case $1 in

条件值1)

    echo 'run'

    ;;

条件值2)

    echo 'run'

    ;;

*)

    echo 'no run'

esac

运算符:

expr 运算表达式 s=`expr 2+3`

或者直接使用$(运算表达式) 例如:$(((2+3)*4))

 

read命令:用于交互式的输入

例如:read -t 等待时间 -p"提示信息" 【 接收输入的变量名】

>>>read -p "test:" num

test:hello

>>>echo $num

hello

 

判断语句:

格式:[ ]

常用判断运算符:

    = 用于字符串的比较

    -lt 小于

    -le 小于等于

    -eq 等于

    -gt 大于

    -ge 大于等于

    -ne 不等于

    -f 后面跟文件名,用于判断文件是否存在

    -w 是否存在且可写

    -d 是否为目录

    -x 是否存在且可执行

 

自定义函数:

function 函数名test()

{

    (如果传递参数,则使用$1,$2···)

    return int型结果

}

test() 1 2;----函数调用

total=$?;----获取返回值 使用$?获取返回值

需要注意的是,在函数调用之前一定先在前面有了定义声明,因为shell执行代码是逐行执行的

 

脚本的调试:sh -vx 脚本名

 

文本处理:

cut:用于分割文本内容,然后打印到标准输出

格式:cut -d '分隔符' -f 索引值(类似java分割后使用数组进行获取)

取分割后的第一列

eq:echo $PATH | cut -d ':' -f 1

/usr/local/sbin

 

取分割后的第一列和第五列

eq:echo $PATH | cut -d ':' -f 1,5

/usr/local/sbin:/root/bin

 

取分割后的3到最后一列

eq:echo $PATH | cut -d ':' -f 3-

/usr/sbin:/usr/bin:/root/bin

 

取分割后的第一到三列

eq:echo $PATH | cut -d ':' -f 1-3

/usr/local/sbin:/usr/local/bin:/usr/sbin

 

sed:

流式文本编辑器,配合正则表达式对文本进行处理(一行一行处理)

通过实例学习:

d命令:

sed '2d' file 删除file文本中的第二行

sed '2,$d' file 删除file文本中第二行到最后一行

sed '$d' file 删除file文本中的最后一行

sed '/word/d' file 删除file文本中的匹配到双斜杠中内容的行

 

s命令:

sed 's/test/word/' file 将file文本中第一个“test”用“word”替换

sed 's/test/word/g' file “g”的作用是将file文本中所

有“test”用“word”替换

sed 's/^test/word/' file 将file文本每行以"test''开头内容用word替换

sed -n 's/test/word/p' file 将发生过替换的行打印到标准输出(-n与p命令搭配使用)

sed 's/^test/&word/' file 使用&命令将file文本中以"test"开头的内容后追加到该匹配符后,如testword(不替换,仅追加)

sed -n 's/\(te\)st/\1word/p' file 部分替换,使用括号进行标记,第一个括号标记为1,第二个括号标记为2,使用“\”转义字符对括号和标记数字进行转义,替换的是除括号以外的部分这里是“st”,替换成“teword”

 

","逗号:选定行范围

sed -n '2,/test/p' file 将文本中第二行到第一个匹配到test的行打印到标准输出

sed -n '/test/,/test2/s/$/word/p' file 将file文本中第一个匹配到的test行与第一个匹配到test2之间行(包含test2行)的末尾($)用word替换(追加)

eq: cat testfile

hello cat

world word

hello word

wode hell

world

what

sed -n '/he/,/wode/s/$/test/p' testfile

hello cattest

world wordtest

hello word test

wode helltest

-e命令:用于执行多个sed命令

 

awk:

文本分析工具,它用于文本内容逐行读入,以默认空格分隔符对每行进行切割,将切开的部分进行各种分析。

单从定义来看很难理解,我们通过示例学习:

打印前一个命令输出文本的第一列

eq:[root@study ~]# last -n 5 | awk {'print $1'}

root

root

root

root

reboot

 

打印/etc/passwd 文本中以":"分割开的第一列内容

eq:[root@study ~]# cat /etc/passwd | awk -F ':' {'print $1'}

root

bin

daemon

···

sort命令:

在shell编程中可能会对文本进行排序操作,这就需要用到sort命令

sort 默认是对文本中的行,按字典顺序排序

如果需要指定排序规则,就要用到-t 先将文本中的每一行分割,-k 指定按分割后的第几列排序 默认按字典顺序排序,-k 3n 按数字大小排序

eq:sort /etc/passwd -t ':' -k 3n(将每行分割,并将第三部分按数字大小排序)

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

eq:vi testfile

hello

world

hello

wode

world

what

sort testfile

hello

hello

what

wode

world

world

sort testfile | uniq(用于排序后的去除重复行)

hello

what

wode

world

sort testfile | uniq -c(-c的作用是去除重复并统计出现的个数)

2 hello

1 what

1 wode

2 world

 

wc命令:

有时我们需要对文本中的内容进行统计,wc即可满足统计的要求

    -l:统计文本中的行

    -c:统计文本字节数

    -m:用于统计文本字符数

    -w:用于统计文本中单词数

 

未完待续...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值