shell四种变量类型 (Shell四则运算指南)
Shell四种变量类型 (Shell四则运算指南)
作为一种脚本编程语言,Shell 在日常的软件开发和系统管理中扮演着重要的角色。在 Shell 编程中,变量是一种用于存储数据的重要工具。根据用途和作用域的不同,Shell 中存在四种不同的变量类型。本文将详细介绍这四种变量类型,并提供 Shell 四则运算的指南。
1. 局部变量
局部变量是在 Shell 脚本中定义的,仅在定义它们的函数或脚本中有效。它们被用于存储临时数据,不会被其他函数或脚本访问。可以通过在变量名前加上
local
关键字来定义局部变量。
例如:
#!/bin/bashfunction myFunction { local name="John" echo "Hello, $name"}myFunction
在上面的例子中,
name
变量是一个局部变量,它只在
myFunction
函数中可见。当函数被调用时,它会打印出
Hello, John
。
2. 环境变量
环境变量是在操作系统级别定义的,对于所有的进程和子进程都是可见的。它们用于存储系统的配置和用户的个人设置。在 Shell 中,可以通过
export
命令将一个局部变量提升为环境变量。
例如:
#!/bin/bashname="John"export nameecho "Hello, $name"
在上面的例子中,
name
变量首先被定义为局部变量,然后通过
export
命令提升为环境变量。当脚本被执行时,它会打印出
Hello, John
。
3. 位置参数变量
位置参数变量用于在 Shell 脚本中处理命令行参数。当脚本被调用时,可以将参数传递给它,并在脚本中使用这些参数。Shell 使用一些特殊的变量来存储这些参数。
例如:
$0 - 脚本的名称$1 - 第一个参数$2 - 第二个参数...
通过这些变量,可以在脚本中访问命令行传递的参数,从而根据需要执行不同的操作。
4. 特殊变量
Shell 还提供了一些特殊的变量,用于存储系统级别的信息或控制 Shell 脚本的运行。
例如:
$HOME - 当前用户的 home 目录$PWD - 当前工作目录$RANDOM - 一个随机数$? - 上一个命令的退出状态...
这些特殊变量可以在 Shell 脚本中使用,以获取有关系统和脚本状态的信息。
Shell四则运算指南
Shell 还提供了一些内置的算术运算符,可以在脚本中执行四则运算。
例如:
#!/bin/basha=10b=5sum=$((a + b))echo "Sum: $sum"difference=$((a - b))echo "Difference: $difference"product=$((a * b))echo "Product: $product"quotient=$((a / b))echo "Quotient: $quotient"
在上面的例子中,我们使用 Shell 的算术运算符来执行加法、减法、乘法和除法运算,并将结果存储在相应的变量中。
通过了解 Shell 中的四种变量类型和四则运算,我们可以更好地理解和使用 Shell 脚本进行编程和系统管理。
linux的shell编程,实现四则运算
不知道你怎么实现的,你本身就编写错误了啊
求在linux环境下用QT编写一个非常简单的计算器计算器包括加,减,乘,除四种运算。用户通过鼠标进
展开全部如果只做四个简单的运算这应应该可以shell脚本代码如下:#!/bin/bashread -p input num1: aread -p input num2: bread -p input operator: ocase $o in+) let res=a + becho $res;;-) let res=a - becho $res;;/) awk BEGIN{printf %.2f\n,$a/$b};;*) let res=a * becho $res;;esac
定义字节类型变量x,y,z,编写实现四则运算:(2+x-y)/z,把运算结果存入字节类型变量f中
data segment
x db ?
y db ?
z db ?
f db ?
data ends
stack segment
st db 100 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
main: mov al, x
add al, 2
mov bl, y
sub al, dl
and ax, 0FF
mov bl,z
div bl
mov f,al
code ends
end main
看对不对 很久没汇编
3. 在shell中变量的赋值有四种方法,其中,采用name=88的方法称
a
一个shell脚本实现的简单四则运算出错。
four调用的时候后面少了参数,比如 four 18 2
求助shell编程高手
一、小括号,园括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 ②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。 ③用于初始化数组。如:array=(a b c d) 2、双小括号 (( )) ①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是假,而一个非零值的表达式所返回的退出状态码将为0,或者是true。若是逻辑判断,表达式exp为真则为1,假则为0。 ②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制) ③单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6 ④双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。if($i<5)if[$i-lt5]if[$a-ne1-a$a!=2]if[$a-ne1]&&[$a!=2]if[[$a!=1&&$a!=2]]foriin$(seq04);doecho$i;doneforiin`seq04`;doecho$i;donefor((i=0;i<5;i++));doecho$i;doneforiin{0..4};doecho$i;done二)中括号,方括号[] 1、单中括号 [] ①bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。 ②Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较ab和bc:[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。 ③字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。 ④在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。 2、双中括号[[ ]] ①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。 ③使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。 ④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。 三)大括号、花括号 {} 1、常规用法。 ①大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。第一种:对大括号中的以逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt。第二种:对大括号中以点点(..)分割的顺序文件列表起拓展作用,如:touch {a..d}.txt 结果为a.txt b.txt c.txt d.txt bogon:/home/bash # ls {ex1,ex2}.sh ex1.sh ex2.sh bogon:/home/bash # ls {ex{1..3},ex4}.sh ex1.sh ex2.sh ex3.sh ex4.sh bogon:/home/bash # ls {ex[1-3],ex4}.sh ex1.sh ex2.sh ex3.sh ex4.sh ②代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。 2)几种特殊的替换结构:${var:-string},${var:+string},${var:=string},${var:?string} A,${var:-string}和${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。 B. ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的) C,${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。 补充扩展:在上面这五种替换结构中string不一定是常值的,可用另外一个变量的值或是一种命令的输出。 3)四种模式匹配替换结构:${var%pattern},${var%%pattern},${var#pattern},${var##pattern} 第一种模式:${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式 第二种模式: ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式 第三种模式:${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式 第四种模式: ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式 这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示零个或一个任意字符,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符 bogon:/home/bash # var=testcase bogon:/home/bash # echo $var testcase bogon:/home/bash # echo ${var%s*e} testca bogon:/home/bash # echo $var testcase bogon:/home/bash # echo ${var%%s*e} te bogon:/home/bash # echo ${var#?e} stcase bogon:/home/bash # echo ${var##?e} stcase bogon:/home/bash # echo ${var##*e} bogon:/home/bash # echo ${var##*s} e bogon:/home/bash # echo ${var##test} case
本文地址: https://www.1dh.cc/article/2932.html