linux shell脚本编程

linux shell脚本编程

简单介绍:

Shell: 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell脚本:一种为shell编写的脚本程序

脚本:通过写若干行代码保存后,执行该文件上面代码并不需要重复手动输入代码而做到该代码执行的效果

Shell 环境:
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
本文主要介绍的sell的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

1.1shell变量
1.1.1
Shell变量名遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
有效的变量名如:RUNNOOB,ld_librar_PATH,_VAR,VAR2
无效的变量命名如:?var=123,user*name=runoob

已经定义过的变量可以重新定义

your_name=“tom”
echo $your_name
your_name=“alibaba”
echo $your_name

除了显式的直接赋值,还可以用语句给变量赋值,如
for file in ‘ls/etc’ (该语句试将/etc下目录的文件名循环出来)

1.1.2使用变量

使用一个定义过的变量,只要加美元符号即可如:
My_name=”mhj”
echo $My_name
echo ${My_name}

变量名外面的花括号是可选的,加花括号是为了帮助解释器识别变量的边界
(num=2
echo “this is the $numnd”
这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,
但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
num=2
echo “this is the ${num}nd”
  这将打印: this is the 2nd)

1.1.3只读变量
使用readonly命令可以将变量定义为只读变量,只读变量值不能被改变

1.1.4删除变量
使用 unset 命令可以删除变量
Unset variable_name

2.1 shell数组

Bash支持一维数组(不支持多维数组)并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

2.1.1定义数组:
例如
Aray_name=(value0 value1 value2 value3)

2.1.2读取shell数组:
例如
Valuen=${array_name[n]}

2.1.3获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
取得数组元素的个数
length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]} …{#array_name[*]}
取得数组单个元素的长度
lengthn=${#array_name[n]}

3.1shell注释
3.1.1单行注释
以 # 开头的行就是注释,会被解释器忽略。

通过每一行加一个 # 号设置多行注释,像这样:

#--------------------------------------------
#这是一个注释
#author:菜鸟教程
#site:www.runoob.com
#slogan:学的不仅是技术,更是梦想!
#--------------------------------------------

用户配置区 开始

#这里可以添加脚本描述信息

用户配置区 结束

3.1.2多行注释
多行注释还可以使用以下格式:

:<<EOF
注释内容…
注释内容…
注释内容…
EOF

4.1shell基本运算符号
4.1.1算数运算符
运算符 说明 举例:a=10,b=20

  • 加法 expr $a + $b 结果为 30。
  • 减法 expr $a - $b 结果为 -10。
  • 乘法 expr $a \* $b 结果为 200。
    / 除法 expr $b / $a 结果为 2。
    % 取余 expr $b % $a 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

4.1.2关系运算符

运算符 说明 举例:a=10,b=20
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

4.1.3布尔运算符
运算符 说明 举例:a=10,b=20
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

4.1.4逻辑运算符
运算符 说明 举例:a=10,b=20
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

4.1.5字符串运算符
运算符 说明 举例:a=10,b=20
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z a ] 返 回 f a l s e 。 − n 检 测 字 符 串 长 度 是 否 为 0 , 不 为 0 返 回 t r u e 。 [ − n " a ] 返回 false。 -n 检测字符串长度是否为0,不为0返回 true。 [ -n " a]falsen00true[n"a" ] 返回 true。
$ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

4.1.6文件测试运算符
操作符 说明 举例:a=10,b=20
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

5.1shell echo命令
5.1.1显示普通字符串
实例:echo “It is a test”

结果:echo It is a test

5.1.2显示转义字符
实例:echo ““It is a test””

结果:“It is a test”

5.1.3显示变量
实例:#!/bin/sh
read name
echo “$name It is a test”

结果:[root@www ~]# sh test.sh
OK #标准输入
OK It is a test #输出

5.1.4显示换行
实例:echo -e “OK! \n” # -e 开启转义
echo “It is a test”

结果:OK!
It is a test

5.1.5显示不换行
实例:#!/bin/sh
echo -e “OK! \c” # -e 开启转义 \c 不换行
echo “It is a test”

结果:OK! It is a test

6.1shell printf 命令
6.1.1printf的转义序列
序列 说明
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

实例:$ printf “a string, no processing:<%s>\n” “A\nB”

结果:a string, no processing:<A\nB>

7.1shell test命令
7.1.1数值测试
参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

实例:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘两个数相等!’
else
echo ‘两个数不相等!’
Fi

输出结果:两个数相等!

7.1.2字符串测试
参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

实例:
num1=“ru1noob”
num2=“runoob”
if test $num1 = $num2
then
echo ‘两个字符串相等!’
else
echo ‘两个字符串不相等!’
fi

输出结果:
两个字符串不相等!

7.1.3文件测试
参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真

实例:
cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi

输出结果:
文件已存在!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值