Shell基础

Shell基本结构和运行

首先创建一个 shell 文件,并使脚本具有执行权限:

touch helloworld.sh

chmod +x helloworld.sh

编写内容如下:

#!/bin/bash
#echo是linux中的输出命令
echo "hello world!"

shell 中#符号表示注释,shell 的第一行比较特殊,一般都会以#!开始来指定使用的 shell 类型。在linux中,除了bash shell以外,还有很多版本的 shell, 例如zshdash等等…不过bash shell还是使用最多的。

运行脚本:./helloworld.sh

注意,一定要写成./helloworld.sh,而不是helloworld.sh,运行其它二进制的程序也一样,直接写helloworld.sh,linux 系统会去PATH里寻找有没有叫helloworld.sh的,而只有/bin, /sbin, /usr/bin/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成 helloworld.sh是会找不到命令的,要用./helloworld.sh告诉系统说,就在当前目录找。

Shell变量

Shell编程中一般分为三种变量:

  1. 自己定义的变量(自定义变量): 仅在当前 Shell 实例中有效,其他 Shell 启动的程序不能访问局部变量。
  2. Linux已定义的环境变量(环境变量, 例如:$PATH, $HOME等…, 这类变量可以直接使用),使用env命令可以查看所有的环境变量,而set命令既可以查看环境变量也可以查看自定义变量。
  3. Shell变量 :Shell变量是由 Shell 程序设置的特殊变量。Shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 Shell 的正常运行

常用的环境变量:

  • PATH:决定了shell将到哪些目录中寻找命令或程序
  • HOME:当前用户主目录
  • HISTSIZE:历史记录数
  • LOGNAME:当前用户的登录名
  • HOSTNAME:指主机的名称
  • SHELL:当前用户Shell类型
  • LANGUGE:语言相关的环境变量,多语言可以修改此环境变量
  • MAIL:当前用户的邮件存放目录
  • PS1:基本提示符,对于root用户是#,对于普通用户是$

使用 Linux 已定义的环境变量:

比如要看当前用户目录可以使用:echo $HOME命令;如果要看当前用户Shell类型 可以使用echo $SHELL命令。

使用自己定义的变量:

#!/bin/bash
#自定义变量hello
hello="hello world"
echo $hello
echo  "helloworld!"

Shell 编程中的变量名的命名的注意事项:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头,但是可以使用下划线(_)开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

Shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号。这点和Java中有所不同。

单引号字符串:

#!/bin/bash
name='Ming'
hello='Hello, I  am '$name'!'
echo $hello

输出内容:

Hello, I am SnailClimb!

双引号字符串:

#!/bin/bash
name='SnailClimb'
hello="Hello, I  am "$name"!"
echo $hello

输出内容:

Hello, I am SnailClimb!

Shell 字符串常见操作

拼接字符串:

#!/bin/bash
name="Ming"
# 使用双引号拼接
greeting="hello, "$name" !"
greeting_1="hello, ${name} !" # 双引号会输出name的内容
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !' # 单引号会直接输出字符串“${name}”
echo $greeting_2  $greeting_3

输出结果:

hello,Ming ! hello,Ming !
hello,Ming ! hello,${name} !

获取字符串长度:

```shell
#!/bin/bash
#获取字符串长度
name=”Ming”

第一种方式

echo $