Linux Shell编程

一、Shell 概述

 Linux 提供的 Shell 解析器 

cat /etc/shells

CentOS 默认的解析器是 bash

二、hello world!

基本语法

#! 指定解析器

echo 用于向窗口输出文本。

#!/bin/sh
echo "hello world!"

常用执行方式

1、bash + 脚本的相对路径或绝对路径  (不用赋予+x 可执行权限) 
2、sh + 脚本的相对路径或绝对路径  (不用赋予+x 可执行权限)
以上两种方式本质是 bash 解析器执行脚本,所以脚本本身不需要执行权限。

3、输入脚本的绝对路径或相对路径( 必须具有可执行权限+x)
本质是脚本需要自己执行,所以需要执行权限。

4、在脚本的路径前加上 . 或者 source

三、变量

1.系统预定义变量

$HOME、$PWD$SHELL$USER 等

2.自定义变量

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

基本语法

(1 )定义变量:变量名 = 变量值, = 号前后不能有空格
(2 )撤销变量: unset 变量名

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

3. 特殊变量
$nn 为数字, $0表示执行的文件名,$1开始表示执行脚本的第n参数,10个以上的参数需要使用${10}
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。把所有的参数看成一个整体
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。把每个参数区分对待,可以循环遍历
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

四、运算符

算术运算符

运算符说明
+加法
-减法
*乘法
/除法
%取余
=赋值
==相等。用于比较两个数字,相同则返回 true。
!=不相等。用于比较两个数字,不相同则返回 true。

1.expr 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,expr 最常用。

2. $((运算式)) 或 $[运算式] 

条件判断

1.test 表达式      0为真 1为假
2.[ 表达式 ](注意 表达式 前后要有空格)
字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

-eq
等于 equal ,两个数是否相等,相等返回 true。
-ne不等于 not equal,两个数是否不相等,不相等返回 true。
-gt
大于 greater than, 左边的数是否大于右边的,如果是,则返回 true。
-lt
小于 less than, 左边的数是否小于右边的,如果是,则返回 true。
-ge
大于等于 greater equal, 左边的数是否大于等于右边的,如果是,则返回 true。
-le
小于等于 less equal, 左边的数是否小于等于右边的,如果是,则返回 true。

​ 

布尔运算符 

-a与运算,两个表达式都为 true 才返回 true。
-o或运算,有一个表达式为 true 则返回 true。
!非运算,表达式为 true 则返回 false,否则返回 true。

a=10 b=20 c=10

 逻辑运算符

&&逻辑与,前一条命令执行成功时,才执行后一条命令
||逻辑或,前一条命令执行失败后,才执行下一条命令

组合使用可以达到三目运算符的效果

文件判断

-r检测文件是否可读,如果是,则返回 true。
-w检测文件是否可写,如果是,则返回 true。
-x检测文件是否可执行,如果是,则返回 true。
-s检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e检测文件(包括目录)是否存在,如果是,则返回 true。
-f检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-d检测文件是否是目录,如果是,则返回 true。

五、流程控制

1.if...else

(1)单分支

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

或者:

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

写成一行(适用于终端命令提示符)
if [ $a -eq 10 ] ; then echo ok ; fi

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

2.case

1 case 行尾必须为单词“in ”,每一个模式匹配必须以右括号“ )”结束。
(2)双分号“;; ”表示命令序列结束,相当于 java 中的 break
(3 )最后的“  * )”表示默认模式,相当于 java 中的 default
case $变量 in
模式1)
    command1  # 变量=模式1,执行command1
    ;;
模式2)
    command2  # 变量=模式2,执行command2
    ;;        
*)            
    command3 
esac

3.for循环

for (( 初始值;循环控制条件;变量变化 ))
do
    程序
done

 for循环求1到10的和

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行:
for var in item1 item2 ... itemN; do command1; command2… done;

 4.while 循环

while condition
do
    command
done

 while循环求1-100的和

5.until

until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。

until condition
do
    command
done

六、读取控制台输入

read ( 选项 ) ( 参数 )
①选项:
-p :指定读取值时的提示符;
-t :指定读取值时等待的时间(秒)如果 -t 不加表示一直等待
②参数
变量:指定读取值的变量名

七、函数

系统函数
1. basename
功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
basename 可以理解为取路径里的文件名称
basename [string / pathname] [suffix] 
选项:
suffix为后缀,如果suffix被指定,basename会将pathname或string中的suffix去掉。

2.dirname
功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分)
然后返回剩下的路径(目录的部分)

dirname 文件绝对路径 

dirname 可以理解为取文件路径的绝对路径名称

自定义函数 

1 )调用函数之前,必须先声明函数, shell 脚本是逐行运行。
(2 )函数返回值,只能通过 $? 系统变量获得,可以显示加: return 返回,如果不加,将
以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255)
[ function ] funname [()]

{
    action;
    [return int;]
}
计算两个输入参数的和

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HUA_8376

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值