shell基础

一、shell概述

Shell是一种脚本语言

脚本:本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解析器、翻译或解析指令并执行(shell不需要编译)

Shell既是应用程序又是一种脚本语言(应用程序解析脚本语言)

Shell命令解析器:

系统提供shell命令解析器:sh ash bash

查看自己linux系统的默认解析:echo $SHELL

Shell脚本是一种脚本语言,我们只需要使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

二、脚本的调用形式

打开终端时系统自动调用:/etc/profile或~/.bashrc

/etc/profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置

开机自启动的程序,一般也在这里设置

~/.bashrc

用户自己的家目录中的.bashrc

登录时会自动调用,打开任意终端时也会自动调用

这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等

用户手动调用:用户实现的脚本

三、shell语法初识

3.1定义开头

第一行一定是:#!/bin/bash,该命令说明,该文件使用的是bash语法。如果不设置该行,则该脚本不会被执行。以#开头的行为解释说明。Shell脚本通常以sh为后缀,用于区分只这是一个shell脚本

执行1.1编写的脚本

加上可执行权限

三种执行方式(./xxx.sh  bash xxx.sh  .xxx.sh)

(1)./xxx.sh:先按照文件中#!指定的解析器解析

如果#!指定的解析器不存在,才会使用默认的解析器

  1. bash xxx.sh:指明先用bash解析器解析

如果bash不存在,才会使用默认解析器

  1. .xxx.sh直接使用默认解析器解析

3.2变量

定义变量   变量名=变量值

如: num=10

引用变量

$变量名

unset:清除变量值

运行结果

从键盘获取read值

运行结果

读取多个值

运行结果

只读变量

运行结果

环境变量

设置环境变量

使用source命令使文件生效

Source Filename 作用:在当前bash环境下读取并执行Filename中的命令

[root@localhost shell1]# source 1.sh

[root@localhost shell1]# env

使用env查看环境变量中已有DATA

也可在终端读取

[root@localhost shell1]# echo $DATA

666

在其他sh脚本读取

[root@localhost shell1]# vi 2.sh

#!/bin/bash

echo "DATA=$DATA"

[root@localhost shell1]# bash 2.sh

DATA=666

如果想在PATH变量中追加一个路径写法

export PATH=$PATH:/需要添加的路径

预设变量

Shell直接提供无需定义的变量

案例

[root@localhost shell1]# vi 1.sh

#!/bin/bash

echo "参加的个数=$#"

echo "参加的内容=$*"

echo "第一个参数:$1"

echo "第二个参数:$2"

echo "第三个参数:$3"

readonly data=10

data=666

echo "data=250的结果:$?"

echo "进程名:$0"

echo "进程号:$$"

脚本标量的特殊用法

变量的扩展

判断变量是否存在

#!/bin/bash

#${num:-val} 如果num存在,整个表达式的值为num,否则为val

echo ${num:-100} #100

num=200

echo ${num:-100} #200

#!/bin/bash

# ${num:=val} 如果num存在,整个表达式的值为num,\

#否则为val,同时将num的值赋值为val

echo ${num:=100} #100

echo "num=$num"  #100

3.3字符串的操作

[root@localhost shell1]# vi 1.sh

#!/bin/bash

str="hehe:haha:xixi:lala"

#测试字符串的长度${#str}

echo "str的长度为:${#str}"  #19

#从下标3为位置提取${str:3}

echo ${str:3} #"e:haha:xixi:lala"

#从下标为3的位置提取长度为6字节

echo ${str:3:6}  #"e:haha"

#${str/old/new} 用new替换str中出现的第一个old

echo ${str/:/#} #"hehe#haha:xixi:lala"

# $ {str//old/new} 用new替换str中所有的old

echo ${str//:/#}  #"hehe#haha#xixi#lala"

运行结果

[root@localhost shell1]# bash 1.sh

str的长度为:19

e:haha:xixi:lala

e:haha

hehe#haha:xixi:lala

hehe#haha#xixi#lala

3.4条件测试

test命令:用于测试字符串、文件状态和数字

test命令格式:test condition 或[condition]

文件测试

文件测试:测试文件状态的条件表达式

-e 是否存在  -d 是目录  -f 是文件  -r 可读  -w 可写   -x 可执行

-L 连接符号  -c 是否字符设备  -b 是否块设备  -s  文件非空

#!/bin/bash

read -p "请输入一个文件名" filename

[ -e $filename ]

echo $?

[root@localhost shell1]# bash 1.sh

请输入一个文件名1.sh

0

字符串测试

[root@localhost shell1]# vi 1.sh

#!/bin/bash

read -p "请输入一个文件名" filename

[ -e $filename ]

#!/bin/bash

test -z $yn

echo $?  #0

read -p "please input y/n:" yn

[ -z $yn ]

echo "1:$?"

[ $yn = "y" ]

echo "2:$?"

运行结果

3.5数值测试

#!/bin/bash

read -p "请输入第一个数值" data1

read -p "请输入第二个数值" data2

test $data1 -eq $data2

echo "相等:$?"

test $data1 -ge $data2

echo "大于等于:$?"

[ $data1 -lt $data2 ]

echo "小于:$?"

运行结果

符合语句测试

多重条件判定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值