栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell编程

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell编程

底层硬件。linux内核可以控制硬件。用户通过外层应用程序来输入指令,但是linux内核不能直接理解这些指令,需要通过shell来进行翻译,用户输入的指令才能操作linux内核从而操作底层硬件。

shell是一个命令行解释器,接收应用程序/用户命令,然后调用操作系统内核。

脚本就是把一行一行指令写在一个文件里。shell可以是一个功能相当强大的编程语言,易编写,易调试,灵活性强。

shell有多个解释器,执行该脚本需要使用哪个解释器要写在脚本开头。一般默认的解释器都是/bin/bash。

shell脚本开头#!/bin/sh,指定默认解释器。

如何打印展示文本:echo。

#!/bin/bash
echo "hello,world"

如何执行一个脚本呢?

第一种:采用bash 脚本的相对路径或绝对路径,这种方式不用赋予脚本+x权限(可执行权限);

第二种:直接输入脚本的相对路径或绝对路径,这种方式需要赋予脚本+x权限。chmod +x 文件名,具有可执行权限以后,文件会变成绿色。

上述两种方式会创建子shell然后在子shell中执行该脚本

第三种:用source 脚本路径。source命令会在当前shell执行该脚本,所以执行配置文件.cshrc需要用source。

开子shell和不开子shell的区别在于,环境变量的继承关系。如果在子shell中设置的当前变量,父shell是不可见的。

在脚本所在目录下使用相对路径,最好用./脚本名。

变量。内存当中开辟出一块区域用来存储一些数据,就是一个变量。

环境变量,有一些变量存储的信息是和工作环境相关的,就叫做环境变量。

全局变量,对所有shell和子shell都可见;局部变量,只对当前shell可见。

变量可以分为两种。一种是系统预定义变量,比如$HOME(home目录路径),$PWD(当前工作路径),$SHELL(当前使用的shell),$USER(当前用户)等

echo $HOME

set命令可以看到当前shell里的所有变量和函数。

另一种是自定义变量。变量名=变量值,=前后不能有空格。撤销变量unset 变量名。声明静态变量(只读变量),readonly 变量,静态变量不能被撤销不能被更改。变量命名规则和Python的一样。

在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。变量的值如果有空格,需要使用双引号或单引号括起来。$变量名,表示获取变量的值,所以一些对变量的操作不需要加$,比如export 变量,表示将变量变为全局变量;unset 变量,撤销变量,都不用加$。

#由于hello, world中间有空格,所以用引号把它引起来
var="hello, world"
#!/bin/bash
var="hello, world"
#注意要使用var变量,前面要加$,这样才会打印出var的值,如果echo var,就会打印出var这三个字母
echo $var

csh解释器和bash似乎不太一样。

$PATH,环境变量,里面是路径,系统在接收到指令后会到该路径下去找,如果有对应的指令就会执行;所以如果想在任意文件夹中,直接在命令行里输入一个脚本就能执行,可以把这个脚本的绝对路径添加到$PATH里,这样系统在任何地方接收到这个脚本的名字,就会去它所在路径找它,就可以执行了它了。

特殊变量。

$n,n为数字,用来接收在命令行中写入的参数,类似Python里的sys.args。$0代表该脚本名称,$1-9代表从第一个到第九个命令行中传入的参数。

echo hello, $1
#在命令行传入wolrd,就会打印hello,world

$#,获取所有输入参数个数(不包括脚本本身),常用于循环里,判断参数的个数是否正确。

$*, $@,获取命令行中的所有参数,$*把所有参数当成一个整体;$@把每个参数区分对待,相当于获取的是一个数组或者列表,里面每个参数单独存放,所以可以用for循环来遍历$@里存放的所有参数。

$?。该变量用于表示最后一次执行的命令的返回状态。如果这个变量的值为0,表示上一个命令正确执行;如果这个这个变量的值不为0,则证明上一个命令的执行不正确。

运算符,$((运算式))或$[运算式]都可,括号里的运算式的空格无所谓。expr 5 + 2也可做运算,注意空格。不过expr 5 * 2会报错,因为*有很多别的含义,需要使用转义符,expr 5 * 2。

怎么把expr 5 + 2的值赋值给变量a呢?需要用到命令替换,把执行的命令(也就是expr 5 + 2)替换成它的值。用到$(expr 5 + 2)即可。

#将ls $PWD的值赋值给变量a
#$PWD代表系统预定义变量
a=$(ls $PWD)
#需要展示a变量的值,所以要加$
echo $a
#注意三个$的不同用法

条件判断。test condition。更简单的写法就是[ condition ],省去了写test,更加常用。#$?用于接收上一条命令的执行情况。如果执行为真,也就是test后面的condition语句成立(或者说就是有一个非0的值,比如243,所以这种情况就和Python里的bool值很像,只要非0就为真),那么$?的值为0,否则为1。所以echo $?就能知道test后的condition是否为真。

不等于号 !=。没有 < >进行比较。

a=123
#注意对a取值,也就是想用a的值,那么它前面要加$
test $a = 123
#condition里=前后都有空格
echo $?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881084.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号