Shell编程
只要是操作系统就离不开Shell这个东西,我们必须通过Shell将我们输入的命令命令与内核沟通,好让内核控制硬件来准确无误地工作。
① Shell变量
(1)环境变量
环境变量是在一个用户的所有进程中都能访问的变量,在系统中常常使用环境变量来存储常用的信息。
环境变量可以帮助我们实现很多功能,包括根目录(主文件夹)的变换、提示字符的显示、执行文件查找的路径等。
【查看环境变量列表】:export 【enter键】
【定义】:export 变量名=内容
【访问】:$变量名
【注意】:自定义的环境变量只有在当前运行的所有进程中有效,并没有保存到系统的文件中,一旦系统重启,就无法再访问这些环境变量。
若需定义成为永久的环境变量,则需将其写入系统配置文件 /etc/profile
在文件最后,输入export 变量名=变量值
(2)位置变量
位置变量指的Shell程序在运行时传入的参数,在程序运行时,可以使用变量的形式来调用这些参数,这些参数被存放1~9 9个变量名中,被形象地称为位置变量。
与普通变量一样,位置变量用$前缀加数字来进行变量标识(访问)
【语法】:
(3)普通变量
1、变量的定义
【设置规则】:
· 变量与变量内容之间以一个等号(=)来连接
· 等号两边不能直接接空格
· 变量名称只能是英文字母与数字,但是开头字符不能是数字
· 变量内容若有空格可使用双引号【“”】或者【‘’】将变量内容结合起来,但是双引号中的特殊字符如$等,可以保留原本的特性,单引号内的特殊字符则仅为一般字符(纯文本)
【注意】:双引号仍能保留变量的内容,但单引号内仅能是一般字符,而不会有特殊字符
2、变量的访问
$变量名 or ${变量}
3、变量的输出 echo 命令
4、变量赋值 = 【默认:字符串类型】
② 算数运算
由于Linux默认是字符串类型,因此若需要进行数学运算,需更改运算顺序。
指示为数学运算: 【重点】
(1)expr :expr 表示后面的是表达式是一个数学运算;
(2)let :指示数学运算;
(3)$[] :指示数学运算;
③ Shell程序的输入和输出
(1)输入 read
====》默认是字符串类型
read 命令读取信息,变量进行接收:
· 只读入一个变量(单变量):键盘输入的所有信息全部赋值给这个变量,按【enter】键结束输入;
· 接收多个变量,则用空格键将输入的变量隔开,如果输入变量的个数多于需要读取变量的个数,则将会把剩余的变量赋值给左后一个变量;
· 在读取语句的后面添加<filename,表示从文件中读取数据,并且赋值给变量;
(2)输出 echo
【语法】:echo [选项] 输出命令
无选项:换行
-n :不换行
-e :处理特殊字符,例如\n,\t,这是这些特殊字符就会起作用
【常用输出方式】:
· echo $变量名 将结果输出到终端
· echo $str > file 将结果保存到文件file,如果没有文件,则会新建一个文件;如果已有文件,则会覆盖以前的文件
· echo $str >> file 将结果追加到文件中,不覆盖,在原文件末尾中添加
【补充】:文件重定向
· command > filename :把标准输出重定向到一个文件中
· command >> filename : 把标准输出追加到一个文件中
· command < filename : 文件内容作为输入,command命令以filename文件作为标准输入
· command < filename >filename2 :command 命令以filename文件作为标准输入,以filename2作为标准输出,即输入输出都是文件。
④ 反引号
``
反引号用于执行引号中的系统命令,然后将命令中的执行结果返回
===》可将执行结果返回作为下一个执行的输入
⑤ 测试语句
这里说的“测试”是对变量的大小、字符串、文件属性等内容进行判断,返回0/1。
0 代表true
1 代表false
【语法】:
法一:test 判断条件
法二:[ 判断条件 ]
【注意】:
[ ]括号内,前后都要留有空格
几个常见的测试:
(1)文件状态测试:
文件状态测试指的是对文件的权限、有无、属性、类型等内容的判断。
例如:
test -d text //判断text文件是否位目录文件夹
echo $? //输出前一个命令的结果
(2)数值测试:
(3)字符串测试:
(4)逻辑测试:
⑥ If语句
【语法】:
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
fi
⑦ For 语句
【语法】:
For 变量名 in 列表
do
函数体
done
【注意】:当for语句省略后面的in关键字时,将接受输入命令时的参数作为循环变量集。
【补充】:
seq 数值 :表示生成一个1—数值的列表序列(从1开始)
类比range(数值) 生成一个从1开始的等差数列。