shell命令行解析器1.0

1 什么是shell

        shell是以.sh结尾文件的命令行解析器,命令ls -> shell -> kernel ->硬件层,shell脚本是一堆有序的命令集合及特有的语法。(简单来说就是将命令写入.sh文件,执行文件即会执行命令)

2 脚本的实例

2.1 shell脚本执行

        执行脚本三种方法:

        ./01test.sh :一般创建.sh文件时系统不会给用户可执行权限(x),需要用户手动开启(chmod 0777 01test.sh或者 chmod u+x 01test.sh )

        bash 01test.sh :可直接执行文件

        source 01test.sh :可直接执行文件

注:./ 与 bash 方式执行会新开子终端执行,将结果传回当前终端,source 直接在当前终端执行。

2.2 shell脚本变量的使用

2.2.1 变量的定义与赋值

        在shell中变量不需要定义,默认赋的值为字符串,可以直接使用。

        赋值运算符 ' = ' 前后不能够有空格

        获取变量值的方式:$变量名 或者 ${变量名}

#!/bin/bash #不是注释,代表解析当前脚本使用的是/bin/bash命令行解析器
var1=123  #默认是字符串
var2='abc def'  #有空格时添加单引号
var3="def $var2"  #当赋值中需要获取变量结果,添加双引号
echo "abcd $var3"

 2.2.2 shell中位置变量的使用

        在shell中使用命令行传参,在脚本中获取参数的变量就是位置变量:./01test.sh 11 22 33

        $0:脚本名字

        $1:11

        $2:22

        $3:33

        ${n} :获取第n个位置参数

        $#:命令行参数个数,不含脚本名

        $@或$*:命令行所有参数,不包含脚本名

2.2.3 命令置换

        将一个命令结构赋值给另一个变量

        ` 命令 `或 $( )

#!/bin/bash
var1=`ls`
echo $var1

var2=$(echo $var1)  #将echo执行的结果赋值给var2变量
echo $var2  

2.2.4 环境变量

        获取环境变量快捷命令:env

        echo $PATH

        echo $HOME

        echo $PWD

        echo $USER

注:如果要修改PATH环境变量,在/etc/environment 中添加自己的绝对路径

       但必须通过 source /etc/environment 来更新路径,否则不生效

./a.out  消去 ./ 方法:

        方法一:将文件中a.out的绝对路径添加到PATH中,再用 source /etc/environment 来更新路径

        方法二:将a.out添加到sudo mv a.out /usr/bin中

2.3 shell中数组的使用

        shell中只有一维数组;

        arr=(11 22 33)  不需要写成员个数,成员之间空格隔开;

        获取数组中成员:${arr[下标]}

        获取数组中所有成员: ${arr[@]}或${arr[*]}

        获取数组中成员个数:${#arr[@]}或${#arr[*]}

        获取某个成员的长度:${#arr[下标]}

        数组默认下标依次递增:arr=(11 22 [3]=444 555) #数组跳过arr[2],赋值了arr[3]和arr[4]

        数组追加:arr=(${arr[@]} 55) #获取源数组成员,附加了55,重新赋值给arr     

案例:

#!/bin/bash
arr=(`ls`) #将ls的结果放在了arr数组中

echo ${arr[0]}
echo ${arr[1]}
echo ${#arr[*]} #获取当前目录下文件的个数
echo ${arr[*]}  #打印数组中所有的成员

2.4 shell的输入输出

        read输入:

                read -p "文本" 变量名  

                read -a 数组名  :从终端输入字符串到数组

                read -s 变量名   :输入的时候不回显

                read -n 3 变量名   :当输入字符到达3个时自动结束输入

                read -t 秒钟 变量    :指定时间输入

        echo输出:

                echo $变量名1 $变量名2 $变量名n

                echo -n "hello world" : -n 取消换行

                echo -n -e "hello world\n" :解析转义字符

        在shell脚本中可以精细化输出:

printf "%d-%02d-%02d %02d:%02d:%02d\n" $year $month $day $hour $min $sec

2.5 shell的算数运算

2.5.1 (()) 进行算数运算

(( 支持C的算数运算 ))

#!/bin/bash
var1=123
var2=456
((sum = var1 + var2 )) #将var1和var2的结果赋值给sum,支持c语法规则
echo $sum

((sum=$var1+$var2)) 
echo $sum

sum=$((var1+var2)) #表示将var1和var2的结果通过$符号取出赋值给sum变量
echo $sum

mul=$((3 * 4))
echo $mul

mul=$((3 ** 4))  #shell中增加了幂运算,表示3^4=81
echo $mul

2.5.2 $[] 进行算数运算

#!/bin/bash

var1=11
var2=22

sum=$[var1+var2]
echo $sum

sum=$[$var1+$var2]
echo $sum

mul=$[3 ** 4]
echo $mul

n=1
n=$[++n]
echo $n

2.5.3 expr 进行算数运算

#!/bin/bash
var1=11
var2=22
expr $var1 + $var2
#在使用expr进行算术运算的时候变量前必须使用$
#运算符前后必须加空格,expr自带向终端输出结果的功能

sum=`expr $var1 + $var2`
echo $sum
#如果要将expr的结果赋值给sum变量必须使用命令置换符

expr 3 \* 4
#如果要使用expr进行乘运算的时候,必须使用转移字符,
#否则认为*是通配符

#expr 3 \*\* 4
#expr不能够进行幂运算

2.5.4 expr虽然运算效率最低,但expr可以操作字符串

#!/bin/bash
#expr match STRING REGEXP

string=www.hqyj.com11

expr match $string "www.h"
#拿后面的字符在string中比如,返回的是匹配上的子字符串的长度
#在匹配的时候如果有任何一个不相等返回的就是0

#expr substr STRING POS LENGTH
expr substr $string 2 5
#从string的第二个字符开始提起,提取5个字符

#expr index STRING CHARS
expr index $string '.'
#获取.在字符串string第一次出现的下标位置

#expr length STRING
expr length $string
echo ${#string}

2.5.5 案例

向程序输入任意一个文件,将文件名和文件后缀提取出来,分别打印到终端上

#!/bin/bash
read -p "input filename > " file

pos=`expr index $file '.'`
len=`expr length $file`

filename=`expr substr $file 1 $((pos-1))`
filetype=`expr substr $file $pos $len `

echo "filename = $filename"
echo "filetype = $filetype"

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值