Linux Shell之echo,变量
本文通过一些简单的demo来学习两种 Linux Shell 在终端echo打印信息的方式并简单介绍了shell变量的概念。
由于目前本人学识有限,可能理解和总结并不全面,如有错误或不足,敬请指正补充,不吝赐教。
echo
输出转义字符:
闲来无事,用shell写了个打印九九乘法口诀0.0,所以就以此小例子来学习,
顺便学习一点shell的简单例子。
可以清楚看出述输出结果中,因为乘法表从5*2=10因为进十位多占一个字符,导致下面层与前面几层没有实现对齐,然而这对于强迫症患者来说可能是受不了的哈哈,那么问题来了如何使之对齐呢,高级语言中有转义字符来解决这个问题,而shell中也能使用转义字符。所以可以运用转义字符“\t”使之对齐,试了好多遍发现并没什么用,后来才发现与高级语言还是有略微不同,在shell 中echo语句 不可直接识别转义字符。
具体解决办法如下图。
对没错就是这样
完美解决。
Note:
1)#!/bin/bash 这个是告诉系统 解释此脚本文件的Shell程序
# 这个是注释行,当行有效
脚本程序一般用 xx.sh 文件表示,这样一样就可以看出文件的属性,当然也可以不这样
一个脚本程序写完后,如果要执行它,则必须先赋+x 执行权限给它
例如:chmod +x xx.sh,然后用命令 ./filename 执行
另外一种方式是直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
2)let :用来执行算数运算和数值表达式测试。
3)read:用于获取用户输入的字符
4)dodone: 则代表高级语言里的左右大括号即{}
另外还有许多同学都对echo后面的几种括号区分了解得不是很清晰。
下面顺便扩展一下echo后面的输出方式的知识。
echo 共有 4 种输出方式:
1. 直接在 echo 后面跟要输出的信息:
note:
1)shell 是一种解析语言,即不需要编译而直接按行读取并解析执行的程序语言。
2)shell 以分号 “ ;” 为指令执行的终止分隔符,因此在执行代码的第二行我们看到了 “;”后面的信息 “Nice to meet you" 被解析成下一条要执行的指令,
并且报错 “Nice :command not found”
3)shell里面引用变量时使用 "$" 符号,由于HOME 是系统环境变量,因此 $HOME 被解析输出成它的值。
4)echo 默认每次从新的一行输出信息。
2. echo 后面使用双引号输出信息:
note:
1) 因为在第2行内无其他像 $, '', `和\以之类的特殊字符字符,””内的内容都被输出了,
2)但如果双引号呢有$, '', `和\以之类的字符,则不被解释成字符本身
可以看到在双引号中,$被作为特殊字符处理,HOME被解释为变量。
3. echo 后面使用单引号输出信息:
echo 使用单引号输出信息时,变量是不会被展开的,即把变量符号直接当成字符串输出,而不是把变量符号展开表示成它的值输出。即单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符。
4. echo 后面使用反引号输出信息:
note:在反引号中的字符串将解释成shell命令来执行。所以第2行内字符串无法被识别导致报错,而第3行为正确shell命令,date被正确输出。
echo总结:
Linux Shell中有三种引号,分别为双引号("")、单引号('')以及反引号(` `)。
其中双引号对字符串中出现的$、''、`和\进行替换;单引号不进行替换,将字符串中所有字符作为普通字符输出,而反引号中字符串作为shell命令执行,并返回执行结果。
简单来说具体含义如下:
双引号(""):在双引号中,除了$,'', `和\以外所有的字符都解释成字符本身。
单引号(' '):在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符。
反引号(` `):在反引号中的字符串将解释成shell命令来执行。
Shell中的变量种类:局部变量和全局变量
局部变量是在函数中用local 声明的变量:他的作用域是在函数调用开始到函数结束。
全局变量 在shell脚本下声明的变量,他的作用域是整个shell的生存周期内。shell结束,全局变量的周期也结束。
echo "在函数外调用 局部变量 var2="$var2
echo "调用全局变量2 var1="$var1
补充:环境变量、位置变量、标准变量、特殊变量等
环境变量:用于所有的用户进程,可以看成是windows下的环境变量,用export定义:
Example:export YourName="YXW",
可以用env或export查看系统环境变量并可以用unset释放变量
unset variable_name。
位置变量:就是调用函数时候的参数.
标准变量:就是bash环境建立的一些标准环境的标量,他会自动去解析,基本都在/etc/profile中定义了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等(引用网上资料)
特殊变量:$# 参数个数,$* 列出所有参数,$!显示后天脚本的进程Id ,$$显示当成脚本的进程id,$? 最后命令退出的状态,0 表示正常;