Centos7中的Shell编程快速入门 -- 超实用介绍

目录

1、快速了解和使用shell scripts

(1)shell和shellscripts

(2)编写一个shell脚本文件并运行

(3)shell脚本的编写执行基本步骤:

2、shell变量 

(1)变量的取用:echo

(2)变量的设定

(3) 变量类型:

(4)只读的shell变量

3、shell字符串 

(1)单引号与双引号的区别和作用

(2)字符串的操作:长度、子串、位置

 4、shell数组

(1)定义数组:()方式、多级方式、索引方式

(2)数组操作:读取、获取长度

5、shell传递参数

(1)什么是参数?

(2)shell脚本文件如何接收参数?

(3)常用的参数处理

6、Shell运算符

(1)shell运算符种类

(2)算术运算符

(3)关系运算符

(4)布尔运算符

(5)逻辑运算符

(6)字符串运算符

(7)文件测试运算符

7、shell编程中的命令

(1)echo命令

(2)printf命令

(3)test命令

8、shell流程控制

(1)if else条件

(2)case条件:

(3)for循环

 (4)while循环

(5)until循环

(6)break和continue语句: 

9、shell函数

(1)定义函数_

 (2)函数参数的传递调用

10、Shell重定向 

(1)管道

(2)输入输出重定向


1、快速了解和使用shell scripts

(1)shell和shellscripts

  • shell是一种程序,用户通过shell告诉kernel需要对硬件进行的操作,是用户访问kernel的工具。
  • shell scripts是一种使用shell编写的脚本程序,只需要有文本编辑器和解释器就足够了。目前最常用的shell是bash(取代了sh)。

(2)编写一个shell脚本文件并运行

编写一个shell脚本

[root@localhost bin]# cd ~
[root@localhost ~]# vi hello.sh
### 输入以下内容

#!/bin/bash
:<<EOF
这是一个shell脚本,用于打印heloworld
结束
EOF
echo "helloworld"
  • 开头的#!是告诉os需要使用接下来的shell解释器来执行该脚本;/bin/bash指示了执行该脚本的shell程序的路径
  • 作用:当使用./来执行脚本时,读到第一行后知道了需要用/bin/bash来执行该脚本。如果没有这一行将会报错。
  • :<<EOF----EOF:这是多行注释,中间的内容都会被注释掉;#是单行注释

运行shell脚本的方式:

[root@localhost ~]# chmod +x hello.sh
[root@localhost ~]# ./hello.sh
helloworld
[root@localhost ~]# sh hello.sh
helloworld
[root@localhost ~]# bash hello.sh
helloworld
  •  ./方式执行,需要该文件有执行权限(并且文件中指定了shell脚本解释器)
  • shell解释器方式执行:需要在文件前指定解释器(bash or /bin/bash)

(3)shell脚本的编写执行基本步骤:

  • 建立shell文件:指定解释器,写入命令
  • 添加执行权限(chmod +x file.sh)
  • 执行shell文件

2、shell变量 

详细参考前文:Shell的变量功能

(1)变量的取用:echo

需要在变量名称前面加上 $ , 或者是以 ${ 变量} 的方式来取用都可以。

[root@localhost ~]# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

(2)变量的设定

用『等号(=)』连接变量与他的内容就好啦!举例来说: 我要将 myname 这个变量名称的内容设定为 langxi。

myname=langxi
echo ${myname}
langxi

变量设定的规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

(3) 变量类型:

  • 局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量,比如上面的myname
  • 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,必要的时候shell脚本也可以定义环境变量,比如PATH
  • shell变量:由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,不同类型的变量保证了shell的正常运行,比如PS1

(4)只读的shell变量

 要将shell变量变为只读,只需要使用readonly命令在变量名前方即可。设为了只读的变量既不能修改也不能删除变量。否则就会报错

[root@localhost ~]# readonly myname
[root@localhost ~]# myname=zhangsan
-bash: myname: readonly variable
[root@localhost ~]# unset myname
-bash: unset: myname: cannot unset: readonly variable

3、shell字符串 

(1)单引号与双引号的区别和作用

shell字符串类型:在shell中字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

使用单引号与双引号的区别是:单引号中不能对其他变量进行引用,只要是单引号中的内容都是字符,也不能进行\转义

[root@localhost ~]# name=langxi
[root@localhost ~]# youname="your name: ${name}"
[root@localhost ~]# echo $youname
your name: langxi
[root@localhost ~]# youname='your name: ${name}'
[root@localhost ~]# echo $youname
your name: ${name}
[root@localhost ~]# youname="我转义了\"这是内容\""
[root@localhost ~]# !echo
echo $youname
我转义了"这是内容"

(2)字符串的操作:长度、子串、位置

  • 获取字符串长度:在对变量取值时,使用”#“对字符串变量进行取值
[root@localhost ~]# youname="我转义了\"这是内容\""
[root@localhost ~]# !echo
echo $youname
我转义了"这是内容"
[root@localhost ~]# echo ${#youname}
10
  • 提取子字符串:使用字符串的截取命令(索引)提取字串(索引从0开始)
[root@localhost ~]# echo ${youname:1:2}
转义

# 索引从0开始,并且是完全闭区间
  • 查找字符串:expr index 可查找某字符在字符串变量中的位置(1)开始 
[root@localhost ~]# echo $(expr index ${youname} 我)
1

# 这里查找的是第几个位置

 4、shell数组

在bash下,仅仅支持一维数组,并且没有限定数组的大小不支持多维数组

类似于 C 语言,数组元素的下标由 0 开始编号(上述字符串也是这样)。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

(1)定义数组:()方式、多级方式、索引方式

# 直接使用()来定义数组
[root@localhost ~]# namearray=(zhangsan lisi wangwu)

# 默认访问namearray[0]
[root@localhost ~]# echo ${namearray}
zhangsan
[root@localhost ~]# echo ${namearray[1]}
lisi

# 多级定义的方式,其实就是多行写入
[root@localhost ~]# namearray=(
> zhangsan
> lisi
> wangwu
> )
[root@localhost ~]# echo ${namearray[2]}
wangwu

# 直接通过索引来定义对应的值,可以跨过中间的索引
[root@localhost ~]# namearray[0]=langxi
[root@localhost ~]# namearray[3]=angel
[root@localhost ~]# echo ${namearray[3]}
angel
[root@localhost ~]# namearray[5]=angel
[root@localhost ~]# echo ${namearray[4]}

[root@localhost ~]# echo ${namearray[5]}
angel

        扩展:自己有发现玄机吗?

[root@localhost ~]# youname="我转义了\"这是内容\""
[root@localhost ~]# echo ${youname[0]}
我转义了"这是内容"
[root@localhost ~]# echo ${youname[1]}

[root@localhost ~]# youname[1]=ws
[root@localhost ~]# echo ${youname[1]}
ws
[root@localhost ~]# echo ${youname[0]}
我转义了"这是内容"

(2)数组操作:读取、获取长度

读取数组的内容:通过索引读取:标号、@(所有) 

[root@localhost ~]# echo ${youname[0]}
我转义了"这是内容"
[root@localhost ~]# youname[2]=angel
[root@localhost ~]# echo ${youname[@]}
我转义了"这是内容" ws angel
[root@localhost ~]# echo ${youname[1]}
ws

获取数组长度:与字符串类似,需要加"#"号

  • 获取元素的个数
[root@localhost ~]# echo ${#youname[@]}   # 从头到尾
3
[root@localhost ~]# echo ${#youname[*]}   # 读所有
3
  • 获取某元素的长度:某元素的索引
[root@localhost ~]# echo ${#youname[0]}
10
[root@localhost ~]# echo ${#youname[1]}
2

5、shell传递参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值