shell 基本命令
简介:
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 … *”会将所有参数作为一个整体,以"$1$2n"的形式组成一个整体
“[email protected]“会将各个参数分开,以”$1” "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
上一篇: PHP获取真实客户端的真实IP的方法介绍
下一篇: Shell基本命令