Shell 编程学习笔记

简介:

Shell 变量
(1). 设定变量 
   Shell变量没有数据型态,像JS变量一样,除非用内置命令declare声明其数据型态。所以SHELL变量不用声明即可使用。
默认情况下以字符串对待。SHELL变量的命名与C语言变量命名相同,并区分大小写。取得变量值用$varname,${varname}
两种方式。
例如(anran.sh):
   #! /bin/bash
   shopt -s -o nounset #表示变量必须设定过才能使用。(1)
   myname=guojianjun #设定变量myname            (2)
   #比较好的习惯,把字符串用单/双引号引起来“guojianjun”
   #=号两边不能有空格,如果右边值有空格,用引号引起来“guo jianjun”
   echo $myname 
   #或者${myname},如果后面还有字符串,数字,下画线,要用{}把变量括起来,否则无法定位变量,这里也就是说只要能
    定位变量就可以,如$myname/2,就工作的挺好。
   #如果同时#掉(1),(2),则报: ./anran.sh: line 6: myname: unbound variable
   #再者如果我们想显示$符号,可以用\或者''(不是双引号,否则会显示变量值,SHELL真能折腾):echo \$myname '$myname'。
除了用echo显示变量外,Bash还有一个printf(C语言的叛徒,不说它了,用到再联系)
(2).取消[回收内存空间]或清空变量[不回收内存空间]
   使用unset清除变量,-v 清除变量,-f清除函数,不加选择的话,尝试清除变量,或失败,再试着取消与之同名的涵数。
   如:unset -v myname.
  清空变量很简单 : myname= 赋空即可。
(3).以前说的变量都是本地变量,即在当前shell中有效。如在父shell中设定:myname=guojianjun 
  执行: 
     #! /bin/bash
     echo $myname
 输出为空。怎样才能使子SHELL可以使用它呢,设定为环境变理:export myname=guojianjun或者declare -x myname=guojianjun
(4).变量扩展
  1.语法:${var-defaultvalue}
  若变量存在,返回变量值,否则返回defaultvalue
  #! /bin/bash
  unset myname
  echo ${myname-anran}
  (以下用法都与1相同)。
  2.语法:${var:-defaultvalue}
   若变量存在且不为空,返回变量值,否则返回defaultvalue
  3.语法:${var:=defaultvalue}
   若变量存在且不为空,返回变量值,否则给变量设定defaultvalue,并返回变量值。
  4.语法:语法:${var:?erro}
     若变量存在且不为空,则继续执行,否则停止执行。
    #! /bin/bash
    fn=${1:?'请提供删除的目录'}
    echo $fn 
  5.语法: ${var:+真值}
    测试变量的存在性,若变量存在且不为空,则什传回真值[真值是非空字符串或数字],否则,传回空值。
  6.语法:${var:startIndex}
    从指定位置截取字符串到字符串结束.
  7.语法:${var:startIndex:length}
    从指定位置截取指定长度字符串.6,7与JAVA语言的SUBSTRING函数差不多。
   有一个特殊的用法${@:2} 由2起取得后面所有的位置参数,而不是字符串长度,${@:2:2}同理。
  8.语法:${#var}
     传回变量值的字符串长度。对比:取得数组元素个数:${#a[@]}/${#a[*]}
  9.语法:${var#style}
    从左边开始,将符合样式的字符串删除(饱汉式,即找到符合的即停止,导至删除最短的)。
    filename="/usr/share/opt"
    echo ${filename#/*/} #结果为share/opt
  10.语法:${var##style}
     同9,但是是饿汉式,所以删除最长的。按上列返回:opt
  11.语法:${var%style}
     同9,但是是从右边开始。
    filename="/usr/share/opt"
    echo ${filename#/*} #结果为/usr/share
  12.语法:${var%%style}
     同10,但是是从右边开始。按上列返回:
  13.语法:${var/style/replace}
     只替换第一个对比符合的字符串(取最长的)。如果没有replace,就变成的删除。
  14.语法:${var//style/replace}
    只替换全部对比符合的字符串(取最长的)。如果没有replace,就变成的删除。
  13~14中的style如果以#开头,则表示该样式出现在变量的开头,以%开头则样式要出现在变量的结尾。
   也符合了9,11一个从左边开始,一边从右边开始。SHELL有些地方还是通的。
(5).命令替换
    语法:varname=$(命令)
   也有这样写的:`命令`(难看)。
   bls=$(ls -l /)
   IFS='\n'
   echo $bls
(6).特殊参数

常用为$0,$1,$2。其中$0代表可执行文件名(不包括路径),$*代表全部参数(即$1 $2 ...),$1代表第一个参数,$2代表第二个参数,依次类推。

另外在脚本里的函数也同样有$0 $1这些特殊的变量。相同的是$0仍然代表文件名,不同的是$1...$n代表你调用该函数里传递的参数,即时变量声明时没有参数声明,比如:

Usage(){

  Echo $0,$1

}

调用Usage anran.

wait for next...


本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/294333


相关文章
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
276 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
Shell Linux 开发工具
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
274 12
|
Shell
Shell编程(下)
Shell编程(下)
205 1
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
160 1
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
存储 Java Shell
shell学习笔记(详细整理)
这篇文章是一份详细的Shell学习笔记,涵盖了Shell的基础知识、脚本编写、变量、运算符、条件判断、流程控制、函数以及常用Shell工具的使用。
466 2
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
189 12