Linux的 Shell 理解和使用
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是另一个普通用户

【export 变量名="初始值"】定义环境变量
【bash】进入子shell,可直接访问环境变量,可用【exit】返回上一级
【env】查看所有环境变量
【unset 变量名】删除变量
位置参数变量:
【$n】n可为[0,9],超过时可用{ },${100}

#!/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"
Linux的 Shell 理解和使用的更多相关文章
- Linux Bash Shell 快速入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- 06 Linux下Shell介绍
一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...
- 轻松学习Linux之Shell文件和目录属性详解
轻松学习Linux之Shell文件和目录属性详解 轻松学习Linux之理解Sitcky 轻松学习Linux之理解umask 轻松学习Linux之理解SUID&SGUID 本系列多媒体教程已完成 ...
- linux自动启动shell和init概述(fedora use systemmd now!!!)
linux运行级别 linux启动之后会在一个级别运行,下面列出了这些运行级别: 0 系统停止 1 单用户系统,不需要登陆 2 多用户系统但不支持NFS,命令行模式登陆 3 完整多用户模式,命令行模 ...
- Linux Bash Shell入门教程
Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/m ...
- Linux和Shell教程
文档资料参考: 参考:http://www.runoob.com/linux/linux-tutorial.html 软件下载参考: centos 下载地址:https://www.centos.or ...
- scala VS python2 (linux or shell)
PS:只考虑最新版的scala和python2.x,由于python3.x和python2.x区别比较大,而且主流的一些开源项目都用的python2,目前python2一点点在兼容python3 1. ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- [转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法
[From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952 ...
随机推荐
- 7行代码,彻底告别python第三方包import导入问题!
最近有不少小伙伴咨询关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事. 随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能.但是,他 ...
- WCF调错方法
1.在VS cmd里,输入wcftestclient.exe 2.添加Service服务. 3.点击要测试的方法,输入参数,点击Invoke. 4.如果错误信息很模糊,则修改WCF程序所在的Web.c ...
- asp.net core web 项目附加进程调试
之前asp.net web项目在部署IIS站点的时候可以直接选择项目目录,不用发布,然后附加进程的时候,找到w3wp.exe开头的进程,再根据用户名找到要附加的进程,就可以附加进程调试了.但asp.n ...
- 20155312 张竞予 Exp7 网络欺诈防范
Exp7 网络欺诈防范 目录 基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 (2)在日常生活工作中如何防范以上两攻击方法 实验总结与体会 实践过程记录 (1)简单应用SET工具建 ...
- linux系统下部署DNS反向解析
DNS服务概述 DNS(Domain Name System)域名系统,能够提供域名与IP地址的解析服务. 反向解析 反向解析是从IP地址到域名的解析过程.主要作用于服务器的身份验证. 部署反向解析 ...
- dede网站安全要做的四件事
1,把安装install的文件夹删除:2,关闭member系统,禁止member文件写入:3,把data文件外移到网站根目录之外:4,把included和plus目录的写入权限关闭. 转载自:http ...
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...
- Liang-Barsky直线段裁剪算法
Liang-Barsky直线段裁剪算法 梁友栋与Barsky提出的裁剪算法以直线的参数方程为基础,把判断直线段与窗口边界求交的 二维裁剪问题转化为求解一组不等式,确定直线段参数的一维裁剪问题.设起点为 ...
- s6-8 TCP 拥塞控制
TCP 拥塞控制 虽然网络层也试图管理拥塞,但是,大多数繁重的任务是由TCP来完成的,因为针对拥塞的真正解决方案是减慢数据率 分组守恒:当有一个老的分组离开之后才允许新的分组注入网络 TC ...
- mysql正则表达式无法识别\d
无法识别\d 修改为[0-9]就ok