Shell

本文详细介绍了Shell脚本的基础知识,包括声明解释器、命令执行方式、常用系统命令如echo和exec,以及变量的定义、规则和运算。此外,还讲解了Shell脚本的交互式执行和作为程序文件执行两种方式,强调了注释在提高代码可读性方面的重要性。文章还深入探讨了变量命名规则、特殊变量、运算符以及相关运算命令,为Shell脚本编写提供了全面的指导。
摘要由CSDN通过智能技术生成

shell脚本的基本元素

1.声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为
#!/bin/bash 。
2.命令:可执行语句,实现程序的功能。
3.注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。


shell脚本的执行方式

交互式执行

[root@localhost ~]# for filename in `ls /etc`
> do
> if echo "$filename" | grep "passwd"
> then
> echo "$filename"
> fi
> done

作为程序文件执行(常用)
对于一组需要经常重复执行的Shell语句来说,将它们保存在一个文件中来执行。我们通常称这种包含多个Shell语句的文件为Shell脚本,或者Shell脚本文件。脚本文件是普通的文本文件,可使用任何的文本编辑器查看或修改Shell脚本

[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# vim test1.sh
#!/bin/bash
for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

常用系统命令

echo命令:在标准输出上输出信息

exec命令:能够在不创建子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止

export:设置提示或显示环境变量

read:可以从标准输入读取字符串信息,传给shell程序内部定义的变量。

exit,退出sheel程序,在exit之后可以有选择的指定一个数作为返回状态


变量

变量的命名
变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量
名的长度,Shell并没有做出明确的规定。

基本语法
(1) 定义变量: 变量名=变量值, 注意, =号前后不能有空格
(2) 撤销变量: unset 变量名
(3) 声明静态变量: readonly 变量, 注意: 不能 unset

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

常用系统变量
$HOME、 $PWD、 $SHELL、 $USER 等

特殊变量
$n (功能描述: n 为数字, $0 代表该脚本名称, $1-$9 代表第一到第九个参数, 十以
上的参数, 十以上的参数需要用大括号包含, 如${10})
$# (功能描述: 获取所有输入参数个数, 常用于循环,判断参数的个数是否正确以及
加强脚本的健壮性) 。
$* (功能描述: 这个变量代表命令行中所有的参数, $*把所有的参数看成一个整体)
$@ (功能描述: 这个变量也代表命令行中所有的参数, 不过$@把每个参数区分对待)
$? (功能描述: 最后一次执行的命令的返回状态。 如果这个变量的值为 0, 证明上一
个命令正确执行; 如果这个变量的值为非 0(具体是哪个数, 由命令自己来决定) , 则证明
上一个命令执行不正确了。 )


变量的运算

运算符说明
+、-求和、差
*、/、%求乘积,商,余数
**幂运算,例如3**3是求3的立方,即27
+=、-=、
*=、/=、%=
例a+=1相当于a=a+1
++variable、-
-variable
先将变量variable的值加1,然后再赋给variable; 先将变量variable的值减1,
然后再赋给variable
variable++、
variable--
先使用variable的值,然后再将该变量的值加1; 先使用variable的值,然后再
将该变量的值减1
位运算符<<、
>>
位运算通常出现在整数间,它针对的不是整个整数,而是其二进制表示形式中的
某个或者某些位(bit)。例如,2>>1是将二进制形式的2,即10,左移1位,从
而变成100,即4。 左移,4<<2,将4左移2位,结果为16; 右移,8>>2,将8
右移两位,结果为2
&、|、~、^按位与,8&4,将8和4进行按位与运算,结果为0; 按位或,8|4,将8和4进行
按位或运算,结果为12; 按位非,~8,将8进行按位非运算,结果为-9(一个字
符占一个字节,即8个二进制位,最高位为1时为负数); 按位异或(a异或b,
a、b值不同结果为1,相同结果为0),10^6,将10和6进行按二进制位异或运
算,结果为12。
<<=、>>=将变量的值左移指定位数之后重新赋给该变量,x<<=3,将x的值左移3位,重新
赋给变量x; 将变量的值右移指定位数之后重新赋给该变量,x>>=4,将变量x的
值右移4位后重新赋给变量x。
&=、|=、^=将变量的值与指定的数值按位与之后重新赋给该变量,x&=8,将变量x的值与8
按位与运算之后重新赋给变量x; 将变量的值与指定的数值按位或之后重新赋给
该变量,x|=7,将变量x的值与7执行按位或运算之后重新赋给变量x; 将变量的
值与指定的数值按位异或之后重新赋给该变量,x^=9,将变量x的值与9执行按
位异或运算之后重新赋给变量x。

 

运算操
作符与
运算命
意义说明
(())用于整数运
算的常用运
算符
在(())中使用变量时可以去掉变量前的$符号
let用于整数运
使用let命令可以执行一个或者多个算术表达式,其中的变量名毋需使
用$符号
expr可用于整数
运算,但还
有很多其他
的额外功能
使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则
会报错;使用乘号时,必须使用反斜线屏蔽其特定含义;使用expr做
计算,将一个未知的变量和一个已知的整数相加,看返回码是否为
0,如果为0就认为做加法的变量为整数,否则就不是整数。
bclinux下的一
个计算器程
序(适合整
数及小数运
算)
[root@localhost test4]# echo seq -s "+" 10 = seq -s "+" 10 |
bc
seq是生成数字序列,-s是指定数字序列之间的分隔符
$[]用于整数运
awkawk既可以
用于整数运
算,也可以
用于小数运
declare定义变量值
和属性,-i
参数可以用
于定义整形
变量,做运
表达式说明
${parameter}返回变量的内容
${#parameter}返回变量内容的长度(按字符)
${paramater:offset}在变量${parameter}中,从位置offset之后开始提取子串到结
${paramater:offset:length}在变量${parameter}中,从位置offset之后开始提取长度为
length的子串
${parameter#word}从变量${parameter}开头开始删除最短匹配的word子串
${parameter##word}从变量${parameter}开头开始删除最长匹配的word子串
${parameter%word}从变量${parameter}结尾开始删除最短匹配的word子串
${parameter%%word}从变量${parameter}结尾开始删除最长匹配的word子串
${parameter/pattern/string}使用string代替第一个匹配的pattern
${parameter//pattern/string}使用string代替所有匹配的pattern

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力干大白中

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

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

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

打赏作者

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

抵扣说明:

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

余额充值