Shell

发布时间 2023-05-23 19:06:30作者: 小肚腩吖

shell

Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell脚本是一种为shell编写的脚本程序。
Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

shell变量

定义变量时,变量名不加$,如:

my_name="xdn"

注意,变量名和等号之间不能有空格。同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线_
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。
    除了显示地直接复制,还可以用语句给变量复制,如:
for file in `ls /etc`
或
for file in $(ls /etc)
# 以上语句将/etc下目录的文件名循环出来

使用变量

使用一个定义过的变量,只要在变量名前面加$符号即可,如:

[root@localhost ~]# myname="xdn"
[root@localhost ~]# echo $myname 
xdn
[root@localhost ~]# echo ${myname}
xdn

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

[root@localhost ~]# for skill in Java;do
> echo "I am good at ${skill}Script"
> done
I am good at JavaScript

[root@localhost ~]# for skill in Java;do 
> echo "I am good at $skillScript"  
> done
I am good at 

如果不给skill变量加花括号,写成echo "I am good at $skillScript" ,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号
已定义的变量可以重新被定义,如:

[root@localhost ~]# your_name="zjx"
[root@localhost ~]# echo $your_name
zjx

[root@localhost ~]# your_name="lyx"
[root@localhost ~]# echo $your_name
lyx
[root@localhost ~]# 

只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:

#!/bin/bash

myurl="https://www.baidu.com"
readonly myurl
myurl="https://www.taobao.com"

运行脚本,结果如下:
img

删除变量

使用unset命令可以删除变量。变量被删除后不能再次使用,unset命令不能删除只读变量
语法:

unset [变量名称]

例:
img

变量类型

运行shell时,会同时存在三种变量:

(1)局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
(2)环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
(3)shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是全局变量,这些变量保证了shell的正常运行。

Shell 字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

str='this is a string'

单引号字符串的限制

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,,作为字符串拼接使用。

双引号

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
    例:
#!/bin/bash

your_name="xdn"
str="hello, I know you are \"$your_name\"!"
echo -e $str

img