3.Shell 编程从入门到精通 --- 编程基础的基本元素

    xiaoxiao2022-07-02  95

    1.再识变量 静态类型语言:一种编译期间就能确定数据类型的语言 动态类型语言:一种运行期间才去确定数据类型的语言 强类型:一种总是强制类型定义的语言。如果不进行明确的转换,不能把它当成一个字符串 弱类型:一种类型可以被忽略的语言 Linux Shell 是一种动态类型的语言和弱类型。shell 语言中的一切变量都是字符串类型的。 2.用户变量 指的是用户在 shell 编程过程中定义的变量,分为全局变量和局部变量。默认为全局变量,局部变量 需要使用local 限定词。 变量的表示方式 $varname 实际上是常用语法 ${varname} 的简略形式。 为什么会有这2种不同的语法呢?原因如下: 1.如果代码中的位置参数超过9个,当引用第10个的时候,必须要用语法 ${10} 而不是 $10。 2.如果要再用户ID后面放置一个下划线,如 echo $UID_, 则 shell 会试图使用 UID_ 作为变量名。 3.字符串操作符 大括号操作符允许我们使用 shell 字符串操作的更多高级功能,即字符串处理运算符。字符串处理运算符允许你完成如下操作: 1.确保变量存在且有值 2.设置变量的默认值 3.捕获未设置变量而导致的错误 4.删除匹配模式的变量的值部分内容 ${varname:-word} : 如果 varname 存在且非null,返回varname的值;否则返回 word。 ${varname:=workd} : 如果 varname 存在且非 null,返回varname 的值;否则返回 word,并将变量设置为word。 ${varname:?message} : 如果varname 存在且非null,则返回varname的值;否则打印 message,并退出当前脚本。 ${varname:+word} : 如果 varname 存在且非 null, 则返回 word;否则返回null 4.命令替换 `command` : 允许你使用命令的标准输出,就像它是一个变量值一样。 5.位置变量 也称为系统变量,位置参数,是shell脚本运行时传递给脚本的参数,同时也表示shell函数内部的函数参数。它们的名字是以数字命名, 超过9,用括号括起来,如 ${10}。 6.启动文件 shell使用一些启动文件来协助创建一个运行环境,其中每个文件都有特殊的用途,对登录和交互环境的影响也各不相同。/etc 目录下提供 全局设置,如果用户主目录下存在同名文件,它将覆盖全局设置。 使用 /bin/login 读取 /etc/passwd 文件成功登陆后,启动了一个交互登陆shell。用命令可以启动一个交互非登陆shell。非交互shell 通常出现在shell脚本运行的时候,之所以称为非交互的,因为它正在运行一个脚本,而且命令与命令之间并不等待用户的输入。 无论运行什么shell,文件 /etc/environment 都先运行。 7.函数 当 shell 执行函数时,并不独立创建子进程。通常的做法是,将函数写入其他文件中,当需要的时候才将它们载入脚本。 1.shell 执行命令的顺序 交互式shell在获取用户输入时,并不是直接就在 PATH 路径中查找,而是按照固定的顺序依次寻找命令的位置。搜索顺序为: 1.别名,即使用 alias command='' 创建的命令 2.关键字,如 if, for 3.函数 4.内置命令,如 cd,pwd 等命令 5.外部命令,即脚本或可执行程序,这才在 PATH 路径中查找 由此可见,在同名时,函数的优先级高于脚本。可以使用内置命令 command,buildin 和 enable 改变优先级顺序。它允许你将函数,别名和脚本 文件定义成相同的名字,并选择执行其中之一。 2.函数的使用规则 1.函数必须先定义,后使用 2.函数在当前环境下运行,共享调用它的脚本中的变量,并且,函数允许你以给位置参数的方式向函数传递参数。函数体内可以使用local限定词创建局部变量。 3.如果在函数中使用 exit 命令,会退出脚本。如果想退回到原来调用函数的地方,则使用 return 命令 4.函数的 return 语句返回函数执行最后一条命令的退出状态 5.使用内置命令 export -f 可以将函数导出到子 shell 中 6.如果函数保存在其他文件中,可以使用 source 或者 . 命令将它们装入当前脚本 7.可以使用 declare -f 找到登录会话中定义的函数。函数会按照字母顺序打印所有的函数定义。如果仅仅想看函数名,则使用 declare -F 语句 3.函数定义 function 函数名() { ... } function () { ... } 4.函数的参数和返回值 由于函数是在当前 shell 中执行,所以变量对于函数和 shell 都可见。在函数内部对变量做的任何改动也会影响 shell 的环境。 参数 : 你可以像使用命令一样,向函数传递位置参数。位置参数是私有的,对位置参数的任何操作并不会影响函数外部使用的任何参数。 局部变量限定词local 返回方式 return : return 命令可以在函数体内返回函数被调用的位置。如果没有指定 return 的参数,则函数返回最后一条命令的退出 状态。按照规定,return 命令只能返回 0~255 之间的整数。 8.条件控制与流程控制 if 条件 then ... elif 条件 then ... else ... fi case 表达式 in 匹配1) ...;; 匹配2) ...;; 匹配3) ...;; esac for name [in list] do ... done while 条件 do ... done until 条件 do ... done

     

     

     

     

    最新回复(0)