当前位置:  技术问答>linux和unix

关于shell整型变量

    来源: 互联网  发布时间:2017-01-28

    本文导语:    大家好,我看到一道shell程序: #!/bin/sh foo=1 while [ "$foo" -le 20 ] do   echo "Here we go again"   foo=$(($foo + 1)) #问题1.请问这句话改成“foo=$($foo + 1)”为什么不行?最里面的括号起到什么作用? done exit 0 问...

  大家好,我看到一道shell程序:


#!/bin/sh

foo=1

while [ "$foo" -le 20 ]
do
  echo "Here we go again"
  foo=$(($foo + 1)) #问题1.请问这句话改成“foo=$($foo + 1)”为什么不行?最里面的括号起到什么作用?
done

exit 0


问题2.shell整型变量还能如何实现自加呢?
请讨论这两个问题,谢谢!

|
1,我是这么记忆的,()是数值运算,$()是获取一条命令的输出,所以$((a + b))就是得到a+b的值了。

2,数值计算可以用foo=$(expr 1 + 2) 或者 let foo=1+2  , 可以使用for循环让其自增, 比较灵活的for循环形式如下:
#!/bin/bash

for ((i = 0; i  4 ))                                      # 真
echo "Exit status of "(( 5 > 4 ))" is $?."     # 0

(( 5 > 9 ))                                      # 假
echo "Exit status of "(( 5 > 9 ))" is $?."     # 1

(( 5 - 5 ))                                      # 0
echo "Exit status of "(( 5 - 5 ))" is $?."     # 1

(( 5 / 4 ))                                      # 除法也可以.
echo "Exit status of "(( 5 / 4 ))" is $?."     # 0

(( 1 / 2 ))                                      # 除法的计算结果 /dev/null                          # 除数为0, 非法计算.
#         
echo "Exit status of "(( 1 / 0 ))" is $?."     # 1


for ((a=1; a  combined_file
# 把file1, file2, file3连接在一起, 并且重定向到combined_file中.
cp file22.{txt,backup}
# 拷贝"file22.txt"到"file22.backup"中

在大括号中, 不允许有空白, 除非这个空白被引用或转义.

echo {file1,file2} :{ A," B",' C'}

file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

代码块


这个结构事实上创建了一个匿名函数(一个没有名字的函数). 然而, 与"标准"函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说还是可见的(除了用declare,typeset命令声明的变量)


()会开启一个新的子shell,{}不会开启一个新的子shell

(())常用于算术运算比较,[[]]常用于字符串的比较.

$()返回括号中命令执行的结果

$(())返回的结果是括号中表达式值

${ }参数替换与扩展

参数替换

${var}
${var}=$var

${var:-default}    ${var-default}
如果var未set,那么就是用default.两者之间不同只有当var为空变量时,前者为default,后者为空.

${var:=default}    ${var=default}
如果var未set,那么就设置default.两者之间不同只有当var为空变量时,前者设置为default,后者设置为空.

${var:+default}    ${var+default}
如果var被set,就是用default.未set,就使用null字符串.两者之间不同只有当var为空变量时,前者为null字符串,后者为default.

上面三种参数替换中,第二种使用后变量的值被改变.

参数替换扩展

${#var}    ${#array}
字符串长度或数组第一个元素的字符串长度
例外:
${#*}、${#@}指位置参数的个数.
${#array
},$[#array[@]}指数组元素的个数

${var#pattern}    ${var##pattern}
从var开头删除最近或最远匹配pattern的子串.

${var%pattern}    ${var%%pattern}
从var结尾删除最近或最远匹配pattern的子串.

${var:pos}
变量var从位置pos开始扩展.

${var:pos:len}
从位置pos开始,并扩展len长度个字符

${var/pattern/replacement}    ${var//pattern/replacement}
使用replacement来替换var中的第一个或所有pattern的匹配.

${var/#pattern/replacement}
如果var的前缀匹配到了pattern,那么就用replacement来替换pattern.

${var/%pattern/replacement}
如果var的后缀匹配到了pattern,那么就用replacement来替换pattern.

${!varprefix*}    ${!varprefix@}
前边所有声明过的,以varprefix为前缀的变量名.


[[]]就是条件表达式,在bash中,字符串比较用  > 

    
 
 

您可能感兴趣的文章:

  • shell变量和子shell的问题请教
  • shell编程,如何将变量中的环境变量转换为绝对值
  • 怎么查看自己的shell的环境变量,和root的环境变量,solaris系统
  • 子shell改变父shell定义变量的值
  • gdb下用shell写环境变量的问题
  • 关于shell变量传递问题?
  • 如何查看当前shell的所有环境变量?
  • 请问如何在C语言中获得shell 变量
  • 请教个shell环境变量的问题
  • Shell编程中如何获取环境变量中设置的路径
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • [linux shell] 如何获得以一个变量的值为名的变量的值
  • 请问一个关于shell变量的简单问题
  • 急急急!!!!!!用B shell如何实现截取变量的子串?
  • unix shell中能否将后台运行程序的输出保存到变量中?
  • 程序中如何使用setenv或者export配置环境变量在当前shell生效
  • 为什么我的系统看不到shell,home变量?
  • 怎样用shell读取properties里面某个键对应的值,再赋值给shell中的变量
  • redhat7.2下怎么在shell文件中以变动日期做为变量?急!!
  • shell脚本的变量问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • linux iis7站长之家
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 请问“当前shell”和“子shell”的区别?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 非登录shell是什么 意思,和登录shell有什么区别啊
  • Solaris 8中修改root的shell为一个非法的Shell后怎么办?
  • 各位Shell高人,如何取得Shell的第10个入口参数?$10不行啊,急!
  • shell 编程 执行shell新建多个终端 并执行程序
  • 如何在一台机器上的shell中执行另外一台机器上的shell
  • 在shell中的交互问题,现在需要在shell结束时按某键或任意键


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3