Shell为命令解释器,把用户命令解释为内核可识别的机器语言,然后翻译命令结果给用户,其也是一个强大的编程语言,是解释执行的脚本语言,无编译,与python机制基本相同。

Shell内部可以直接调用Linux系统命令

echo命令的基本使用

【echo “内容“ 】输出命令

【echo -e “内容“ 】输出,并支持转义字符

转义符:

【\t】制表符,tab键

【\a】警告音,

【\b】退格,删除左边一个字符、

【\c】取消最后的换行,与-n效果一致、

【\f】换页符,横向占位

【\v】与上相同

【\n】换行

【\r】回车,光标回到行首

\\】

【echo -e "\e[1;31m 输出内容 \e[0m"】红色输出abd

其中:【\e[1;】表示开始标志,【[0m】为结束标志,【31m】表示颜色,可有(黑色 30m)(红色 31m)(绿色 32m)(黄色 33m)(蓝色 34m)(洋红 35m)(青色 36m)(白色 37m)

输入输出重定向

标准输入:键盘(/dev/stdin)

标准输出:显示器(/dev/stdout)

标准错误输出:显示器(/dev/stdout)

输出重定向:

【命令 > 文件】以覆盖的方式把正确输出重定向到文件中

【命令 >> 文件】以追加的方式把正确的输出重定向到文件中

【命令 2> 文件】标准错误输出重定向,覆盖

【命令 2>> 文件】标准错误输出重定向,追加

【命令 >>正确文件  2>>错误文件】对命令判断,分别保存命令结果

多命令顺序执行

【命令1; 命令2;命令3】执行命令1到3,错误不影响下一个命令执行

【命令1 && 命令2 && 命令3】前面的命令必须正确执行,才能执行后面的命令

【命令1 || 命令2】命令1正确执行,就不会执行命令2,命令1错误时才会执行命令2

【命令 && echo yes || echo no】判断命令是否正确执行

【命令1 | 命令2】命令1的正确输出作为命令2的操作对象,管道符

如:【ls -lh /usr/bin | grep -i --color=auto pip3】查看pip3的执行文件

通配符

匹配文件名,对于命令:ls 、find、cp

【?】匹配任意一个字符

【*】匹配任意0个或多个字符,如【rm -r *】删除目录下所有文件和文件夹

【[字符1字符2字符3]】匹配字符1到字符3的其中一个字符

【[a-z]】表示匹配小写字母a到z的任意一个字符

【[^123]】表示不匹配括号内的字符

正则表达式

匹配字符串,对于命令:grep、awk、sed

基本支持标准的正则表达式

特殊:

【\{n,m\}】n到m次,需要加斜线

Shell中无【()】、【+】、【?】

特殊字符

【‘内容’】单引号的内容仅仅表示字符串

【“内容”】双引号的内容会解释特殊符号,如(\)转义、($)调用变量、(`)反引号等

【`命令`】反引号,内容为引用的命令,可用【$(命令)】代替

【#】表示注释当前行之后的内容

【$变量】引用变量的值时

变量

变量的值全部以字符串保存

【set】查看系统所有变量

【unset 变量名】删除变量

用户自定义变量

本地变量,只在当前shell中生效

声明:namex=”wo sh”

调用:$namex

追加:namex=“$namex”” dongxiaodong”  或者 namex=${namex}” dongxiaodong”

环境变量

父子shell的共享变量

【pstree】查看当前所属shell位置

通过ssh连接的客户端有3个,其中1是root,2是当前普通用户,3是另一个普通用户

Linux的 Shell 理解和使用-LMLPHP

【export 变量名="初始值"】定义环境变量

【bash】进入子shell,可直接访问环境变量,可用【exit】返回上一级

【env】查看所有环境变量

【unset 变量名】删除变量

位置参数变量:

【$n】n可为[0,9],超过时可用{ },${100}

Linux的 Shell 理解和使用-LMLPHP

#!/bin/bash

#接收第0个参数
echo "当前程序为:$0" #接收第一个和第二个参数
n1=$1
n2=$2 echo "结果为:"$(( $n1 * $n2 ))

【$*】将输入的所有内容看出一个字符串,不包括$0

【$@】把输入参数分开,相对于把$n内容存放在数组里,不包括$0

【$#】查看输入参数的个数,不包括$0

系统预定义变量:

【$?】输出上一次命令是否正确执行,0为正确,其他为错误码

键盘输入

【read 选项 变量名】把输入的内容存入到变量中

选项有:

(-t) 等待输入时间

(-n) 指定输入的字符个数,字符达到数量时会自动确定

(-p) 输入提示信息

(-s) 隐藏输入,如输入密码

判断条件

【[ -e 文件名 ]】判断文件是否存在

【[ -d 目录名 ]】判断目录是否存在

【[ -f  文件名 ]】判断是否为普通文件

【[ 整数1 -eq 整数2]】判断相等,相等返回真

【[ 整数1 -ne 整数2]】判断不相等

【[ 整数1 -gt 整数2]】判断整数1是否大于整数2

【[ 整数1 -lt 整数2]】判断整数1是否小于整数2

【[ 整数1 -ge 整数2]】判断整数1是否大于等于整数2

【[ 整数1 -le 整数2]】判断整数1是否小于等于整数2

【[ -z 字符串 ]】判断字符串是否为空,空返回真

【[ -n 字符串 ]】判断字符串是否非空,非空返真

【[ 字符串1 == 字符串2 ]】判断字符串是否相等,相等为真

【[ 字符串1 != 字符串2 ]】判断字符串是否不相等,不相等为真

【[ 判断1 -a 判断2 ]】-a表示与,-o表示或,!表示取反

Shell代码编程

Shell脚本执行:【bash 脚本名】或者:【chmod 700 脚本名】【./脚本名】

简单的 if 比较:

 #!/bin/bash

 if [ "" == "" ]
then
echo "输出:相等"
#执行系统命令
ls -lh elif [ 4 -eq 4 ]
then
echo "4等于4"
else
echo "输出:不相等"
#执行系统命令
pwd fi #退出shell,并修改 $? 的值为2
exit 2

简单的 case 编程:

 #!/bin/bash

 #键盘输入
read -t 30 -p "entry:" nox
case "$nox" in
"")
echo ""
;;
"")
echo ""
;;
*)
echo "xxxxxxxxxxxxxxxx"
;;
esac

简单的 for 循环:

 #!/bin/bash

 for i in 1 2 5 5 8
do
echo $i
done

or

 #!/bin/bash
#1到100相加程序
s=0
for ((i= 1;i<=100;i=i+1))
do
s=$(($s+$i))
done
echo "1+2+3+........+100= $s"

简单的while循环

另外until循环的判断条件是假就继续循环

 #!/bin/bash

 i=1
s=0
while [ $i -le 100 ]
do
s=$(( $i+$s ))
i=$(( $i+1))
done
echo "1+2+3+.....+100= $s"

05-06 20:10