Shell的正确使用

目录

[shell 介绍](#shell 介绍)

变量名的定义规则

变量名定义:

删除变量

特殊的变量名:

算术运算符

逻辑运算符:

(1)整数之间比较

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

(3)按照文件类型判断

(4)多条件判断

常用的特殊字符:

条件选择、判断

if判断

条件判断:case

循环:

for:

while

until循环:

[select 循环与菜单](#select 循环与菜单)

read读取控制台输入

自定义函数:

练习题:


shell 介绍

Shell 一个命令解释器,它接收应用程序/用户命令,然后调用操作系统内核。

Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。

Linux提供的Shell解析器有:

Centos 默认的Shell解释器是bash

命令:echo $SHELL

变量名的定义规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写

(2)等号两侧不能有空格

(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

(4)变量的值如果有空格,需要使用双引号或单引号括起来

变量名定义:

定义变量:username="小明"

查看变量内容:echo $username

删除变量

:unset username

查看全部变量:set

正确定义数组:arr=("熊大" "熊二" "光头强" "蹦蹦")(两个元素之间不能使用逗号,需要使用空格来分割数组中的每个元素)

**根据下表拿数组元素:**echo ${arr1}

echo ${arr2}

**拿取所有元素:**echo ${arr\*}

将局部环境变量提升为全局:假如先编写一个demo1.sh文件,里面定义echo $username

通过sh demo1.sh查看为空白内容

然后在外面编写一个username=小丫丫,当我们定义export username时,发现当我们查看sh demo1.sh时,输出小丫丫

这时,就是局部变量提升为全局变量

正确选择引号(单引号和双引号的区别):

定义:dog=金毛 echo $dog 输出结果为:金毛

dog='金毛' echo $dog 输出结果为:金毛

dog="金毛" echo $dog 输出结果为:金毛

定义:

yy='dog 是一只小狗' echo yy 输出结果:$dog 是一只小狗

yy="dog 是一只小狗" echo yy 输出结果:金毛 是一只小狗

避免在命令中使用反引号

在bash中,可以将命令的结果保存到变量中,有两种可能:

file_list=`ls`

或者

file_list=$(ls)

特殊的变量名:

n(功能描述:n为数字,0代表该脚本名称,1-9代表第⼀到第九个参数,⼗以上的参数需要⽤⼤括号包含,如${10})

$# (功能描述:获取所有输⼊参数个数,常⽤于循环)。

\* (功能描述:这个变量代表命令⾏中所有的参数,*把所有的参数看成⼀个整体)

@ (功能描述:这个变量也代表命令⾏中所有的参数,不过@把每个参数区分对待)

$?(功能描述:最后⼀次执⾏的命令的返回状态。如果这个变量的值为0,证明上⼀个命令正 确执⾏;如果这个变量的值为⾮0(具体是哪个数,由命令⾃⼰来决定),则证明上⼀个命令执⾏不正确了。)

算术运算符

(1)"((运算式))"或"运算式"

(2)expr + , - , \*, /, % 加,减,乘,除,取余

注意:expr运算符间要有空格

逻辑运算符:

格式:条件 注意:\[\]里面前后必须要有空格

结果:0表示真,非0表示假

(1)整数之间比较

=字符串比较

-lt小于 -le小于等于 -eq等于

-ge大于等于 -gt大于

-ne不等于

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

-r有读的权限(read)

-w有写的权限(write)

-x有执行的权限(execute)

(3)按照文件类型判断

-f 文件存在并且是一个常规文件

-e 文件存在

-d文件存在并是一个目录

(4)多条件判断

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

常用的特殊字符:

^

^匹配一行的开头,如下,会匹配/etc/passwd中以root开头的行:

cat /etc/passwd | grep ^root

$匹配一行的结尾,如下,会匹配出/etc/passwd中以bash结尾的行:

cat /etc/passwd | grep bash$

.匹配任意字符:

cat /etc/passwd | grep r..t

*不单独使用,和上一个字符连用,表示匹配上一个字符0次或多次,如下,可匹配第一个字符为r,最后一个字符为t,中间可包含任意数量的o:

cat /etc/passwd |grep ro*t

字符区间(中括号)\[\]

\[\]表示匹配某个范围内的一个字符,例如

6,8 匹配6或8

0-9 匹配1个0-9的数字

0-9* 匹配任意长度的数字字符串

a-z* 匹配任意长度的字母字符串

a-ce-f 匹配a-c或者e-f之间的任意一个字符

特殊字符:\

\表示转义,并不会单独使用,当匹配某一特殊字符时,需要将转义字符和特殊字符连用例如:echo "abc" \| grep "\\\\"

echo "abc" \| grep '\\'

扩展的正则表达式:如{n,m},使用grep匹配的时候,需要添加-E选项,否则无法识别这种语法:echo "ab,cdre" | grep "a-z {2,3}"

echo "ab,cdre" | grep -E "a-z {2,3}"

条件选择、判断

if判断

用法格式:if 判断条件 1 ; then

条件为真的分支代码

elif 判断条件 2 ; then

条件为真的分支代码

else

以上条件都为假的分支代码

Fi

例子:

条件判断:case

用法格式:

case $name in

PART1)

cmd

;;

PART2)

cmd

;;

*)

cmd

;;

esac

case行尾必须为单词"in" ,每一个模式匹配必须以右括号")"结束。

双分号";;"表示命令序列结束,相当于break 最后的*)表示默认模式,相当于default

循环:

for:
while

用法格式:while 循环控制条件 ;do

循环

done

until循环:

用法:

until 循环条件 ;do

循环

done

进入条件:循环条件为true;退出条件:循环条件为false;刚好和while相反,所以不常用

select 循环与菜单

用法:

select variable in list

do

循环命令

done

1、select循环主要用于创建菜单,按数字顺序排列的菜单项显示在标准错误上,并显示PS3提示符,等待用户输入

  1. 用户输入菜单列表中的某个数字,执行相应的命令

3、 用户输入被保存在内置变量 REPLY 中

4、select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 按 命令终止脚本。也可以按ctrl+c退出循环

5、 select 和 经常和 case 联合使用

6、与for循环类似,可以省略 in list,此时使用位置参量

read读取控制台输入

read(选项)(参数)

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

-t:指定读取值时等待的时间(秒)

参数:变量:指定读取值的变量名

自定义函数:

练习题:

编写一个函数来计算输入的是不是一个质数

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux