Linux Shell编程入门

您所在的位置:网站首页 脚本编程教程 Linux Shell编程入门

Linux Shell编程入门

2022-12-28 06:46| 来源: 网络整理| 查看: 265

文章目录 Shell概述**Linux** **提供的** **Shell** **解析器有****Centos** **默认的解析器是** **bash** Shell 脚本入门第一个shell脚本脚本的常用执行方式 变量系统预定义变量常用系统变量 自定义变量基本变量变量定义规则特殊变量 运算符 条件判断常用判断条件实际操作 流程控制if判断case 语句**for** **循环**while 循环read 读入 shell 实验练习练习echo给变量赋值练习通过修改PS1变量来更改提示符练习find命令,全盘查找passwd文件,然后用相应的命令确认每一个passwd文件的文件类型。练习管道的使用,完成以下要求:编写一个shell小程序

Shell概述

Linux 提供的 Shell 解析器有 [root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh Centos 默认的解析器是 bash [root@localhost sy]# echo $SHELL /bin/bash Shell 脚本入门

脚本格式

脚本以#!/bin/bash 开头(指定解析器)

第一个shell脚本

创建一个 Shell 脚本,输出 helloworld

#!/bin/bash echo "helloworld" 脚本的常用执行方式

采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)

sh ./helloworld.sh bash ./helloworld.sh

采用输入脚本的绝对路径或相对路径执行脚本(需要添加可执行权限)

chmod +x helloworld.sh ./helloworld.sh

注意:第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行

权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

在脚本的路径前加上“.”或者 source

使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需

要 source 一下的原因。

开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的

当前变量,父 shell 是不可见的

变量 系统预定义变量 常用系统变量

H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER 等

查看系统变量的值

(144) root@ localhost ~/sy] $ echo $HOME /root

显示当前shell中所有变量 set

声明静态变量:readonly 变量,注意:不能 unset

自定义变量 基本变量 定义变量: 变量名=变量值,注意,=号前后不能有空格撤销变量:unset 变量名 变量定义规则 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。等号两侧不能有空格在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。变量的值如果有空格,需要使用双引号或单引号括起来。

export 变量 可把变量定义为全局变量

特殊变量

$n

n 为数字,$0 代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})

(150) root@ localhost ~/sy] $ vim mysh.sh (151) root@ localhost ~/sy] $ vim test.sh #!/bin/bash echo $0 echo $1 echo $2 (152) root@ localhost ~/sy] $ bash test.sh 1 2 test.sh 1 2

$#

获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性

$*

这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@

这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

$?

最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一

个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明

上一个命令执行不正确。

运算符

“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))” 或 “ ((运算式))”或“[运算式]”

计算(2+3)* 4 的值

(154) root@ localhost ~/sy] $ echo $[(2+3)*4] 20 条件判断

[ condition ](注意 condition 前后要有空格)

常用判断条件

两个整数之间的比较

-eq 等于(equal) -ne 不等于(not equal)

-lt 小于(less than) -le 小于等于(less equal)

-gt 大于(greater than) -ge 大于等于(greater equal)

注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

按照文件类型进行判断

-e 文件存在(existence)

-f 文件存在并且是一个常规的文件(file)

-d 文件存在并且是一个目录(directory)

实际操作

helloworld.sh 是否具有写权限

(159) root@ localhost ~/sy] $ [ -w mysh.sh ] (160) root@ localhost ~/sy] $ echo $? 0 流程控制 if判断

(1)单分支

if [ 条件判断式 ];then 程序 fi

或者

if [ 条件判断式 ] then 程序 fi 多分支 if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi

注意事项:

[ 条件判断式 ],中括号和条件判断式之间必须有空格

if 后要有空格

case 语句 !/bin/bash case $1 in "1") echo "banzhang" ;; "2") echo "cls" ;; *)

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

双分号“;;”表示命令序列结束,相当于 java 中的 break。

最后的“*)”表示默认模式,相当于 java 中的 default。

for 循环 #!/bin/bash sum=0 for((i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3