欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell 基本命令

程序员文章站 2022-06-03 11:51:14
...

简介:
Shell是用户与内核进行交互操作的一种接口,用C语言实现,目前最流行的Shell称为bash shell
Shell是一门编程语言,解释型的语言,Shell脚本就是在用linux的Shell命令来编程
一个系统可以存在多个Shell,可以通过cat /etc/shells命令查看系统中安装的Shell
sh是Unix的解释器,bash是目前用的最多的,dash比bash的执行速度要快,但缺少很多功能

变量:
Linux Shell中的变量分为系统变量和用户自定义变量
可以通过set命令查看系统变量

声明变量:通常用大写,等号左右不能有空格,首字母不能以数字开头,不能是关键字
取值时,变量两边的{}为了便于解析避免混肴调用变量值时加大括号

双引号和单引号的区别:
双引号会将两端的空格脱义,
单引号不仅会将空格脱义,还会将变量引用比如$ARG脱义

变量前加关键字readonly变为只读变量
readonly B=“bbb” 或者 B=“bbb” readonly B

unset删除变量,只读变量无法删除

反引号赋值,用``,运行反引号里面的命令,并把结果返回给变量A
A=ls -la
等价于 A=$(ls -la)

export A 可以把变量A提升为当前Shell进程中的全局环境变量,可供其他子Shell程序使用
另一种方式:
如果在a.sh脚本中用如下调用b.shell
. ./b.sh 或者 source ./b.sh ## 此时b.sh就在a.sh所在的bash进程空间中运行

特殊变量:
$? 表示上一个命令退出的状态码(返回值),范围是0~127
$$ 表示当前进程编号
$0 表示当前脚本的名称
$n 表示n位置的输入参数
$# 表示参数的个数,常用于循环
*和@ 都表示参数列表
注:*与@区别
不被双引号包含时:
*和@都以$! $2 … nn的形式组成参数列表 当它们被双引号包含时: “*”会将所有参数作为一个整体,以"$1$23...3...n"的形式组成一个整体
[email protected]“会将各个参数分开,以”$1” "2"..."2" ... "n"的形式组成一个参数列表

练习:把某一个目录下的一个文件拷贝到当前目录下

字符串处理
获取字符串的长度:变量前加#
提取变量中的部分字符串:KaTeX parse error: Expected 'EOF', got '#' at position 11: {STR:4:3} #̲ 数字4代表从下标4开始取,数…STR" i` 注意:得到的位置不是下标,是从1开始的

数组:
bash只支持一维数组,不支持多维数组
没有限制数组的大小
元素下标由0开始

方法一:定义数组:数组名=(值1 值2 值3  ... 值n)

方法二:可以单独定义数组的各个元素
arr[0]=value0
arr[1]=value1
arr[5]=value5

获取数组的长度
	length=${#arr[n]}

注释:sh里没有多行注释,只能每一行加一个#
多行注释
方法一:
:’
语句1
语句2

方法二:
:<<!
语句1
语句2
!
方法三:
if false; then
语句1
语句2
fi
方法四:
把暂时不用的代码放到一个函数里不去调用它
也会起到注释的作用

运算符:
算数运算符 + - * / = == !=
关系运算符 -eq -gt -ge -lt -le -ne
布尔运算符 !(非) -o(或) -a(与)
逻辑运算符 && ||
字符串运算符 = != -z -n str
文件测试运算符 -d -f -r -w -x -s -echo

原生bash是不支持简单的数学运算符,可以借助其它的命令来实现,例如awk和expr
expr是一个表达式计算工具,也是最常用在表达式求值用途中的
val=`expr 3 + 2` ## 用到反引号,表达式和运算符之间要有空格

在相乘的时候需要把*转义


布尔运算符:
! 非运算, 表达式为true,则返回false,否则返回true
-o 或运算, 有一个表达式返回true,则返回true
-a 与运算, 两个表达式都为true,才返回true


逻辑运算符
&& 相当于Java中的&&
|| 相当于Java中的||

字符串运算符:
= 检测两个字符串是否相等,相等返回true
!= 检测两个字符串是否相等,不相等返回true
-z 检测字符串长度是否为0,为0返回true
-n 检测字符串长度是否为0,不为0返回true
str 检测字符串是否为空,不为空返回true

文件测试运算符:用来检测文件的属性
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空(文件的大小是否大于0)
-e file 检测文件或目录是否存在

条件控制:表达式两端必须要有空格
if [ express ]
then
command1
elif [ export ]
then
command2
else
command3
fi

循环:for while until
for var in item1 item2 … itemN
do
command1
command2

commandN
done

while循环:表达式要用一对小括号
while condition
do
command
done

until循环
until命令和while命令类似
但区别是while循环在条件为真时继续执行循环
而until则在条件为假时执行循环

case匹配:必须有in,一个模式结束必须用双;;号,esac作为整个case的结束标识
case 值 index
模式1)
command
;;
模式2)
command
;;
esac

以上循环都支持continue和break

相关标签: shell