Linux初步学习(一)
菜鸟教程入口:
https://www.runoob.com/linux/linux-tutorial.html
shell
https://www.runoob.com/linux/linux-shell-variable.html
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
shell脚本的扩展名为.sh
- 指定shell 解释器
#!/bin/bash
#!符号后面指定
运行脚本
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本注意此处运行的时候必须写成
./文件名的形式,直接写的话Linux会去Path里面寻找这个文件,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。或者作为解释器参数传给解释器以进行运行
/bin/sh test.sh
第一个shell程序
!/bin/bash |
echo是控制台输出

shell 变量
变量名不能有
$命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线 **_**。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
变量赋值
显式=,或者
for file in `ls /etc` |
以上语句将 /etc 下目录的文件名循环出来。
变量使用
- 使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="qinjx" |
花括号的作用是提示编译器这是个变量名
比如
for skill in Ada Coffe Action Java; do |
如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
加上:

不加但是加了空格:

花括号加不加都行,不加的时候注意用空格区分开
变量只读
- 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
!/bin/bash |
变量删除
unset variable_name |
变量类型
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
字符串
单引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
str='this is a string' |
双引号
- 双引号里可以有变量
- 双引号里可以出现转义字符
your_name="runoob" |
字符串拼接
your_name="runoob" |
- 直接拼接,不需要逗号或者加号等
子字符串
string="runoob is a great site" |
查找字符串
string="runoob is a great site" |
- 注意上面的expr…是反引号,不是单引号
字符串长度
string="abcd" |
字符串长度的其他方法
string="hello,everyone my name is xiaoming" |

输出6
数组
数组名=(值1 值2 ... 值n) |
单独定义变量
array_name[0]=value0 |
读数组内容
${数组名[下标]} |
取得数组全部内容
echo ${array_name[@]} |
取得数组长度
# 取得数组元素的个数 |
注意,可能数组会出现
这是因为 ubuntu 模式使用的是 dash 模式,如果不想报错使用 bash 模式
的报错,此时使用命令 bash xxx.sh 或者 将脚本第一行改为 *#!/bin/bash,执行./example.sh也可以
输出数组长度的时候可能不对,此时输出的是1

此时也是1

此代码的输出为
array=(0,1,2,3,4,5,6) |

- 可以通过给数组设置下标范围以外的单元的内容来增加数组的长度
注意,使用指定下标修改数组比如array_name[0]=value0会丢弃该下标后面的其他内容
注意,代码不能随意包含空格,比如等号两边,可能会引起错误
字符串截取
参考 https://www.runoob.com/linux/linux-shell-variable.html 第一篇笔记
读取用户输入
read [-options] [variable...] |
read -p "input a val:" a #获取键盘输入的 a 变量数字 |
shell注释
以# 开头的行就是注释,会被解释器忽略。
- 多行注释
:<<EOF |
或者任何符号
:<<' |