龙空技术网

快速掌握Linux这篇文章就够了

数据科学君 86

前言:

目前各位老铁们对“shell脚本执行成功返回值 echo”可能比较关注,朋友们都需要学习一些“shell脚本执行成功返回值 echo”的相关知识。那么小编也在网摘上网罗了一些有关“shell脚本执行成功返回值 echo””的相关文章,希望大家能喜欢,兄弟们快快来学习一下吧!

服务器路径

命令符号释义/根目录/bin二进制可执行命令/dev设备特殊文件/etc系统管理和配置文件/etc/rc.d启动的配置文件和脚本/home用户主目录的基点/lib标准程序设计库/sbin超级管理命令/mnt系统提供这个目录是让用户临时挂载其他的文件系统/root系统管理员的主目录/Lost+found这个目录平时是空的, 系统非正常关机而留下“无家可归”的文件/proc虚拟的目录,是系统内存的映射/usr应用程序和文件几乎都在这个目录./var某些大文件的溢出区boot内核文件 Linux 系统文件(100MB-200MB) 服务器500MBopt临时文件

常用快捷键

​图形界面 到 字符界面Ctrl Alt Fn (F1-----F6) init 3​字符界面 到 图形界面 Alt F7   init 5​Tab键 :自动补齐​反斜杠\ :强制换行​ctrl+u 清空至行首​ctrl+k 清空至行尾​ctrl+L 清屏​ctrl+c 取消本次命令编辑​touch 创建文件​mkdir 创建目录  mkdir -p  创建嵌套的多层目录结构​cd 切换工作目录 cd -  切换两个目录  cd .. 返回上个目录​du 统计目录及文件 du -s 只统计大小 du -a 统计所有文件 du -h 人性化显示​du -sh \*  查看所有文件及大小​pwd ------- 查看当前所在位置​vim  ------查看日志(编辑器)​Ls ------ 打印(当前目录下所包含的内容)ls 显示目录内容(ls=ll)​./ ------直接运行脚本​​

查看帮助

​help, -help man info (man ls)​常用命令 uname 查看系统信息及内核版本(-a 显示主机;-r 显示内核版本)​hostname 查看主机名​vim /etc/sysconfig/network 更改主机名​ifconfig 查看网络信息​shutdown -h now | poweroff | init 0     关闭计算机​shutdown  -r now  |  reboot  |  init 6   重启计算机​
Ln软链
Ln链接文件​Ln 要链接的文件 链接到什么地方​ln 创建链接文件 ​ln -s 软链接 ln 硬链​

CP 复制

​cp  -r 递归复制整个目录树  cp=cp-i  cp -r 递归复制​cp -p 保持源文件的属性不变​cp -f 强制覆盖目标同名文件或目录​cp -i 需要覆盖文件或目录时进行提醒​

RM 删除

​rm -rf 递归强行删除文件或者目录 不进行提醒​rm -f  强行删除文件或者目录,不进行提醒​rm -r 递归删除整个目录树​rm - i 删除文件或者目录时提醒用户确认​​

MV 移动(改名)

​Cat 查看文件​More 分页查看文件 (不可返回)​Less 分页查看文件 (可返回)​Head 查看文件头(前10行)​Tail 查看文件尾 (后10行)​​
WC 统计
​wc -l 统计行数 wc -w 统计单词个数 wc -c 统计字节数​

压缩指令

压缩 (仅限文件)

gzip

bzip2

表示高压缩比:

gzip -9

bzip2 -9

解开已经压缩的文件

gzip -d

bzip2 -d

Tar 归档

口令打包压缩:

Tar 要打包压缩到什么地方 要打包压缩的文件

​单个解释用法:tar -c 创建 . tar格式的包文件​tar -x  解开. tar格式的包文件​tar -v 查看详情信息​tar -f 表示使用归档文件​tar -p 打包时保留原始文件及目录的权限​tar -t 列表查看包内文件​tar -C 解包时指定释放的目标文件夹​tar -z 调用gzip程序进行压缩或者解压​tar -j 调用bzip2 程序进行压缩或者解压​组合命令:​tar -cvf 打包​tar -zcvf 打包压缩​tar -zcvf  XXX.tar.gz  XX​tar -xvf 解压 ​tar -xvf xxxx.tar.gz -C aaa 解压到指定目录​打包压缩---- tar -zcvf​解压 ----- tar -zxvf ​指定位置解压--- tar -zxcf -C​xx.bz2用bzip2 -d解压​xx.gz用gzip -d解压​xx.tar.gz 用-zxvf解压​xx.tar.bz2用-jxvf解压​​

常用

​打包:1、tar -zcvf a2data.tar.gz ./a2data.cn/*2、tar -zcvf a2data.tar.bz2 ./a2data.cn/*  ---- 将a2data.cn文件夹下统一打包 ------​解压(万能):​tar -xf a2data.tar.bz2 ./ ---- 解压到当前路径下----​​

VI 编辑器

命令模式:vim/vi ESC​输出模式:a、i、o等键​末行模式:(大写)A键​​工作模式:命令模式 输入模式 末行模式​a       #光标后面写​i       #光标前面写​o       #下一行写​dd      #删一行​n+dd    #删几行​d$      #删除光标后面的同一行 (删光标)​d^      #删除光标前面的同一行 (不删光标)​x       #删光标​X       #删光标前面的​yy      #复制​p       #黏黏到下一行​P       #黏黏到上一行​u       #撤销上一步​U       #撤销这一行的所有修改​:q!     #不保存退出            ​:w      #保存​:wq     #保存退出​:/      #搜索的东西   搜索什么 从上到下搜索​%       #搜索的东西   搜索什么 从下到上搜索​

行号

:set nu    #设置行号​:set nonu  #不要行号了​跳转到首行gg​跳转到尾行G​\#G跳转到到第几行​:e/etc/passwd 打开新的编辑文件​:r/etc/passwd 读入其他文件内容​文件内个替换​s/old/new 替换行里的一个old换成new​s/old/new/g 整行替换 old换成new​#,#s/old/new/g #到#行替换 old换成new​%s/old/new/g 整篇替换 old换成new​c 末尾加入c 对每个替换提示用户进行确定​​​

权限控制属组权限

字符制表示八进制 000 - 777

字符表示法八进制表示法含义r4读w2写x1执行

修改权限的命令

【 su - u2 切换用户】 ​1、 chmod 修改文件权限​2、 chown,chgrp 修改文件权属 ​U----所有者  O----其他人  a-----所有人  g-----所属组​chomd a=rwx root  所有都拥有读写执行权限 ​cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more​

用户控制命令useradd 添加用户useradd -g 指定用户所属用户组useradd -G 用户组 指定用户所属的附加组useradd -u 用户号 指定用户的用户号

命令:指定用户所属组

useradd -g 组名 -u 用户号 用户名

​例如​useradd -g g3 -u 510 u5​指定用户附属组​useradd -g 组名 -G 所在组 用户名​例如:​useradd -g g4 -G g1 u7​​

修改账户信息usermod 修改账户信息usermod -g 用户组指定用户所属的用户组usermod -l 锁定账号usermod -u 解锁账号userdel 删除账户userdel -r 删除宿主目录

设置密码

passwd 设置密码

passwd -l 锁定账号

passwd -u 解锁账号

passwd -s 查看账号状态

usermod -L u1 u1账号被锁定

usermod -U u1 u1账号被解锁

passwd u1 设置u1 账号密码

linux 组账户

groupadd 添加组成员

groupdel 删除组成员

gpasswd 设置组成员

-a 添加成员

-d 删除成员

-M 定义成员列表

gpasswd -a u1 g1 将u1加入到g1组中

gpasswd -M u1,u2,u3,u4,u5 g2 将u1到u5添加g2组里

网络设置

存放位置 —- 以RedHat为例

/etc/sysconfig/network-scripts/ifcfg-etc0

修改ip

​setup  交互式图形化工具vim /etc/sysconfig/network-scripts/ifcfg-eth0​
修改 DNS
​/etc/resolv.conf​
修改主机名
​vim /etc/sysconfig/network​​

网卡控制

​1.ifdown 关闭网卡 丨 ifup 开启网卡​2.service network stop 丨 start 丨restart                  停止     开启     重启
开机自启动
​chkconfig  httpd on​
开机自动挂载

设置开机自动挂载的路径

这个是当时学习在虚拟机上使用的多。

​/etc/fstab ​
网络配置
​IP:是一个逻辑地址,是由32位二进制构成-------------------------------------------------------setup​vim /etc/sysconfig/network-scripts/ifcfg-eth0​DEVICE=eth0                 网卡​BOOTPROTO=none                 是否自动获取IP ---> dhcp​HWADDR=00:0c:29:d6:96:fb         MAC地址​ONBOOT=yes                  是否随网络服务启动,eth0生效​NETMASK=255.255.255.0             子网掩码​IPADDR=192.168.18.76             IP地址​TYPE=Ethernet                 类型为以太网​------------------------------------------------------修改DNS​vim /etc/resolv.conf​search localdomain​nameserver 192.168.40.2​nameserver 202.106.0.20 联通​nameserver 114.114.114.114​nameserver 8.8.8.8 谷歌​nameserver 4.4.4.4 谷歌

系统程序

系统程序管理

RPM包 (Red Hat)

命名格式 : bash-3.1-16.1.i386.rpm

软件包名-版本号-发布次数-硬件平台-后缀名

rpm管理命令

  rpm -q [子选项] 【软件名】​  rpm -qa 查看系统中已安装的所有rpm软件包列表​  rpm -qpi 通过.rpm 包文件查看该软件的详细信息​  rpm -qpl 查看.rpm安装包内所包含的目录.文件列表
安装
​   rpm -i rpm包文件   安装一个新的rpm软件包​   rpm - U 升级某个rpm软件包,若原本未安装,则进行安装​   rpm  -F 更新某个rpm 软件,若原本未安装,则放弃安装​​

安装

步骤1: tar 解包步骤2: ./configure 配置步骤3: make 编译步骤4: make instal步骤5:  service httpd restart       service network restart步骤6:  cd /var/www/

Yum

本地:Yum(file本地)

​命令:​cd  /etc/yum.repos.d/xd​挂载:1. 挂载光盘镜像到/mnt​mount /dev/cdrom /mnt    2. 配置yum源​vim /etc/yum.repos.d/xxx.repo​[xxx]​baseurl=(flie本地)​enabled=1(是否启动文件 0否 1是)​gpgcheck=0​3. 安装    yum -y install 软件名称 (vsftpd)​4. 重启​yum    service vsftpd start​

服务器Yum

​------服务器yum​0、命令:cd  /etc/yum.repos.d/​1、服务器端提供共享​-- 服务器安装一个ftp-- 把光盘镜像挂载ftp的共享目录​挂载:​mount /dev/cdrom /var/ftp/pub​必须保证两台机器能够正常通信(能够ping通)​2、配置客户端​vim /etc/yum.repos.d/xxx.repo​[xxx]​baseurl=[]()  /var/ftp/pub 【服务器ip地址及共享目录】​enabled=1(是否启动文件 0否 1是)​gpgcheck=0​开启 service vsftpd start​
卸载

rpm -e 软件名

源代码(灵活定制)

tarball 封包

tar.gz 或者 tar.bz2

效验工具

md5 sum 
磁盘管理查看磁盘
fdisk -l ​fdisk /dev/sdb 磁盘分区​指令 m​l    list known partition   列出所有的分区​n   add a new partition      创建一个新的分区​p   print the partition table  打印分区内容​t   change a partition's system id  改变分区系统id​w  write table to disk an exit  保存并退出分区​d  delete a partition 删除一个分区
查看分区
​fdisk -l ​fdisk /dev/sdb  磁盘分区​n----创建​d----删除​
交换分区
fdisk  /dev/sdb格式化为 swap 命令​mkswp  /dev/sdb1​

设置分区

​mkswap /dev/sdb1 (做成交换文件系统)​free 查看一下内存​swapon /dev/sdb1 开启交换内存​free 查看内存​swapoff  /dev/sdb1 关闭交换内存​free 最后查看 是否存在
文件系统
​umount 卸载mount 挂载​1、创建mkfs - t ext3 /dev/sdb1​mkfs ext3/dev/sdb1​挂载​mount /dev/sdb /mnt​查看​df -hT ​​​

LVM逻辑卷

创建lvm

创建物理卷__PV

   pvcreate /dev/sdb,c,d,e (创建pv)​   pvdisplay(显示pv)
创建卷组
   vgcreate /dev/feng_vg /dev/sdb,c,d,e(创建vg)​   vgdisplay (显示vg)
拓展vg
    pvcreate /dev/sdf(创建一个新的pv)​    vgextend feng_vg /dev/sdf (扩展vg)
减少vg
   vgreduce feng_vg /dev/sdc,d,e
移除vg
    vgremove feng_vg

创建LV

  lvcreate -L 30G -n feng_lv feng_vg
格式化
  mkfs.ext3 /dev/feng_vg/feng_lv
挂载
 mount /dev/feng_vg/feng_lv /aa
增加
   先卸载 ​  umount /aa​  lvextend -L +10G /dev/feng_vg/feng_lv(检测硬件)​  resize2fs /dev/feng_vg/feng_lv (重设文件系统大小)

减少LV

先卸载 (输入卸载名称或者目录)      umount /dev/feng_vg/feng_lv​缩小lv先缩小文件系统再缩小lv​e2fsck -f /dev/feng_vg/feng_lv (检测硬件)​resize2fs /dev/feng_vg/feng_lv 9g (将文件系统缩小到9G)
缩小lv
 lveduce -L 9G /dev/feng_vg/feng_lv
移除lv
  lvremove /dev/feng_vg/feng_lv

移除pv

 pvremove /dev/sdb1 /dev/sdb2​lv 使用pe(默认4M) 的块  ​lvcreat  -l  (小写)  个数           ​lvcreat -L  (大写)  指定容量
Mdadm 案例 raid5一、添加RAID5
mdadm -C /dev/md5 -l 5 -n 3 /dev/sd[b,c,d]​
二、创建文件系统
   格式化:mkfs.ext3 /dev/md5    makir /raid5
三、挂载文件系统
    mount /dev/md5 /raid5  挂载文件系统​    df -hT  查看
RAID容错
mdadm /dev/md5 -f /dev/sdb  损坏磁盘b​mdadm -D /dev/md5 查看​mdadm /dev/md5 -a /dev/sdf 增加一块磁盘​mdadm /dev/md5 -r /dev/sdb 移除坏磁盘​echo "DEVICE /dev/sdc /dev/sdd /dev/sde /dev/sdf" >>(写入到哪) /etc/mdadm.conf  把UUID 写入 /etc/.......文件中​mdadm -Ds >> /etc/mdadm.conf  把UUID 读写出来​cat /etc/mdadm.conf​mdadm -S --scan /dev/md5 关闭RAID(需要卸载md5)​mdadm -A --scan /dev/md5 开启RAID​​恢复快照!

SSH 协议

​默认端口 :TCP:22 FTP:21 SSH:22 Apache(阿帕奇):80​步骤1: ping 192.168.18.221 (ping得通)​步骤2:ssh [root@192.168.18.221](mailto:root@192.168.18.221) 输入密码 进入服务端​步骤3: exit 退出服务端 ​ssh-keygen -t rsa(或者dsa) 客户机生成密钥​  步骤4:ssh-copy-id -i .ssh/id_rsa.pub [root@192.168.18.221](mailto:root@192.168.18.221)​将密钥上传输到服务端。​步骤5:输入服务端密码 exit 再次输入 ssh [root@192.168.18.221](mailto:root@192.168.18.221)​便可直接进入!​

计划任务

date----当前时间 ctrl+D 保存     Atq 查看任务列表 Atrm 删除任务​

At 一次性计划任务

命令:at + 时间

Crontab 周期性计划任务

服务脚本名称: /etc/init.d/crond

​crontab -e [-u 用户名] 编辑计划任务​crontab -l [-u 用户名] 查看计划任务​crontab -r [-u 用户名] 删除计划任务​
周期条件

分时日月周执行内容0-59(整数)0-23(整数)1-31(整数)1-12(整数)*run_command50321*执行命令或脚本例如:3018*/3*1,3,5/bin/rm-rf /var/ftp/pub/*30 18 */3 * 1,3,5 /bin/rm -rf /var/ftp/pub/* 每隔3天在周1,3,5来清除FTP服务公共目录.

*,-/表示该范围内的任意时间表示间隔的多个不连续时间点表示一个连续的时间范围指定间隔的时间频率

搭建一个Apache论坛

该论坛是再虚拟机环境下运行,实机一样得操作。   恢复快照,检测是否有 阿帕奇​ service httpd restart​ 源代码安装的 进入apache目录 删除即可​ yum源安装的 使用 rmp卸载 
一、挂载
mount  /dev/cdrom /mnt 挂载镜像文件到/mnt​ls /mnt/Server/  查看是否有文件​vim /etc/yum.repos.d/aa.repo 配置yum文件​
二、安装
​*【注:\* 为安装http 下所有包】​1.yum -y install http\* (先装阿帕奇服务)​2.yum -y install mysq\* (数据库)​3.yum -y install php\* (php开发语言)​
三、启动
service httpd restart 启动阿帕奇​service mysqld restart 启动mysq​再去启动论坛包(Discuz_X2_SC_UTF8)copy到虚拟机​
四、解压(zip压缩包)
​cd /root/Desktop 切换到桌面​unzip Discuz_X2_SC_UTF8 解压Discuz到桌面​cp -r upload /uar/www/html/ 复制upload文件到html​cd /dav/www/html ​ls 切换到html 查看是否有upload文件​(恢复快照)重新配置ip​vim /etc/sysconfig/network-scripts/ifcfg-eth0​ifdown eth0 && ifup etho​ping通(192.168.18.222)--本机​使用本机或者虚拟机浏览器进行访问​192.168.18.221 Red Hat  192.168.18.221 upload​
五、安装
192.168.18.221/upload进入Dis 安装向导​修改阿帕奇权属权限​chown apache upload html -R(-R递归修改所有权属)
六、创建数据库
mysql 进入数据库​show databases; 显示当前数据库​create database hehe; 创建 hehe​grant all on hehe.\* to ‘hh’@‘localhost’ identified by ‘123456’; (密码 ,授权)​数据库名:hehe​数据库用户名:hh​密码:123456​​
错误情况方案整理:
​1、数据库模版错误​   yum -y install php-\*​2、安装http中过程中途停止​   yum -y install httpd-devel​3、安装mysql时出错​   yum -y install mysql-connector-odbc​4、想卸载已安装http(apache)时,需在挂载镜像。​  yum -y remove http\*​​​5、配置yum(配置服务器中文包)​yum install fonts-chinese.noarch​yum install m17n-db-common-cjk​yum install m17n-db-chinese​

NFS网络文件系统

1.功能:文件共享

2.协议与端口: 需要RPC进行控制

NFS安装

yum install nfs-utils protmap(端口分放)​

服务机 ip 221

​vim /etc/exports (配置文件)​/aa 192.168.18.220/255.255.255.0(rw)​根下aa  共享(客户机)ip/子掩网码  rw 读写 ro 只读​cd / 切换到根下​mkdir aa 创建aa目录​touch aa/abc.txt 创建aa下abc文档​service nfs restart 重启nfs服务​

客户机 ip 220

​showmount -e 192.168.18.221​cd /​mkdir pub 创建pub 文件​mount 192.168.18.220:/aa pub 挂载到aa/pub​切换到服务机 更改权属 ​ll -d aa 查看aa权限​      chmod o+w aa 修改aa权限(o 其他人)​service nfs restart 重启服务​切换到客户机 ​cd pub/​vim abc.txt  修改​touch aa.txt 创建一个文件​切换到服务机​cd aa  ls aa  查看是否有文件

配置Samba

samba 软件包

samba.i386 : The Samba SMB server.

samba-client.i386 : Samba (SMB) client programs.

samba-common.i386 : Files used by both Samba servers and clients.

安装samba

mount /dev/cdrom /mnt  挂载​切换到挂载目录进行配置​cd /mnt/Server/  ​vim /etc/yum.repos.d/qq.repo​r /etc/yum.repos.d/rhel-debuginfo.repo​yum -y install samba​

编辑文件

cd /etc/samba/ 切换​vim smb.conf 配置文件​
vim /etc/samba/smb.conf​security=share   ---共享​找见[public] 7yy 复制7行 ​p 粘贴
修改
[aa]  --- 这是昵称​comment = nidaye    ---注释信息​path = /aa      ---要共享的目录​public = yes ---公共的匿名用户可以访问的​writeable = yes   ---可被写​browseable = yes   ---可被浏览
查看
​cd /  ls mdkir qq  返回根下查看 创建qq文件 ​cd qq touch aa.txt  切换到qq下创建aa文档​service smb restart 重启smb服务​

修改文件权限

1、 chmod o+w /aa ​2、 cd /aa  chmod 777\*​

Linux客户端

smbclient -L //192.168.18.221---查看共享信息

smbclient  //192.168.18.221/share-进入共享目录​? 查看有哪些命令可以使用​ls 查看共享目录下有哪些内容
windows客户端

\192.168.18.221 ---可以看到共享目录

系统监控PS 进程监控

ps工具标识进程的5种状态码

D 不可中断uninterruptible sleep(usually IO)R 运行runnable (on run queue)S 中断sleepingT 停止traced or stoppedZ 僵死a defunct ("zombie") process

使用方法

ps [options] [--help]

ps的参数-A列出所有的行程-w显示加宽可以显示较多的资讯-au显示较详细的资讯-aux显示所有包含其他使用者的行程

总述

标识释义USER行程所拥有者PIDpid%CPU占用cpu使用率%MEM占用的记忆体使用率VSZ占用的虚拟机体大小RSS占用的记忆体大小TTY终端的次要装置号码

COMMAND

所执行的指令

top动态监控系统进程

TOP动态

第一行任务队列信息- 01:06:08 当前时间 1 user 当前登录用户数第二、三行 进程和cpuTasks:158total 进程总数最后两行为内存信息Mem:191272k total 物理内存总数 COMMAND 命令名/命令行

SAR

系统活动情况报告

指令软件包:sysstat-7.0.3-3.el5.i386mp

sar 命令常用格式

sar options[-o file]t[n]

其中:t:采样间隔 n 采样次数 默认值为1.

options未明朗行选项,sar常用选项如下:

-o file表示将命令结果以二进制格式存放在文件中-A所有报告的总和-u输出cpu使用情况的统计-v输出inode、文件和其他内核表的统计信息-d输出每一个块设备的活动信息-r输出内存和交换空间的统计信息-b显示l/O和传送速率的统计信息-a文件读写情况-c输出进程统计信息,每秒创建的进程数-R输出内存页面的统计信息-y终端设备活动情况-w输出系统交换活动信息

vmstat监控工具

vmstat 2 10 每隔两秒采集10次r---表示运行队列b---表示阻塞的进程swap----虚拟内存已经使用的大小si----每秒从磁盘读入虚拟内存的大小sp---每秒虚拟内存写入磁盘的大小in----每秒cpu的中断次数sy----系统cpu时间id----空闲cpu时间wt-----等等lO cpu 时间

iostat

主要可以显示cpu和1/O系统的负载情况及分区状态信息 直接执行iostat

lsof主要查看端口lsof -i 22查看端口为22 的服务losf -g gid显示归属gid的进程情况lsof -i用以显示符合条件的进程情况echo $$当前进程号kill -9 5641杀死(结束)5641进程strace跟踪进程执行时的系统调用和所接受的信号。Find详解 常见用法-name filenname#查找名为filename的文档-perm#按执行权限来查找-user username#按文档属主来查找-group groupname#按组来查找-mtime -n +n#按文档更改时间来查找文档 -n指n天以内,+n指n天以前-group groupname#按组来查找-type b/d/c/p/l/f#查是块设备、目录、字符设备、管道、符号链接、普通文档-size n[C]#查长度为n块[或n字节]的文档-prune#忽略某个目录

shell脚本

Shell:操作系统与用户进行交互操作的界面,提供脚本语言编程环境,方便用户自动批量处理大量的工作任务。

红帽企业版linux一般默认的Shell是bash shell。

vim aa.sh           #编辑aa脚本​cd /root/Desktop   #切换到root下的桌面​mkdir aa            #创建aa目录​touch aa/aa.txt    #在aa目录下创建aa.txt​sh aa.sh            #运行aa.sh脚本​echo $$   查看当前进程号 ​bash      进入另一个shell​exit      退出

history 历史

语法替换!!前一个命令!n命令号n!-n倒数第n个命令!cmd最后用来启动cmd的命令

多命令运行

​#!/bin/sh  注释信息,可写可不写​echo $?  返回值:通过$?变量进行查看,返回0成功,不成功则返回非0值!​有条件的链接命令​&&  把两个命令链接在一起,只有第一个命令成功执行时,才会执行第二个命令。​||  把两个命令链接在一起,只有第一个命令失败时,才会执行第二个命令。

Bash变量

例如:aa=DataScience​echo $aa 则会显示DataScience
Shell变量
A和B  A=123 B=234​echo a:$A b:$B  显示AB变量内容​a:123 b:234​export A 将A变量提升为环境变量​bash​ps​echo a:$A b:$B---- 启动一个bash ,通过ps运行,确定有俩个shell在运行;父shell(B),子shell(A)由于被提升为一个环境变量,A shell从B shell中继承了它,相反,A shell对B shell的变量B一无所知。Bshell 属于sleep状态。结果如下​a:123 :b:​exit  ​echo a:$A b:$B 退出再次查看​ a:123 b:234​unset A B----- 取消环境变量A和shell变量 B 

命令替换

替换 语法含义历史(history)!前一个命令行大括号(Brace){}指定的文本代字号(Tilde)~username用户的主目录变量​{...}Shell和环境变量算数(Arithmetic)$((...))算数运算命令替换‘...’,$(...)运行在字shell中的命令的输出路径名(Pathname)[^...*]?,[...]文件系统中匹配的文件名

​mkdir chap{a1,a2,a3,a4,}/{bb,cc} 需要先创建{a1,a2,a3,a4}​mkdir -p {a1,a2,a3,a4,}/{bb,cc}​

算法

a=123 b=234​echo $(($a+$b))  ----- a+b​357         ---------- 结果​​2、计算器​Scale=2  保留几位小数, %取余。Quit     退出计算器 \:反斜杠 转义字符
创建时间文档
  date +%Y%m%d   

语法作用\避免下一个字符被shell解释“”避免双引号内除了S、!和(反引号)字符以外的其它字符被shell解释‘’避免单引号内的字符被shell解释

​alias 命令  Shell别名可创建扩展(替换)为任意文本的命令​alias NAME=a​unalias 取消 ​unalias a 取消a替换NAME的命令​
标准输入 标准输出
​echo “aaa”> aa.txt   创建aa.txt文档​cat aa.txt       查看aa.txt文档​设置密码(可批量设置用户密码)​useradd u1   创建u1用户​passwd u1    设置u1 密码​useradd u2   创建u2用户​vim bb.txt   新建立一个bb.txt文档​123456      将密码输入 bb.txt文档中​passwd u2  --stdin <bb.txt    将输入定向到文档中​su - u1  切换到u1​su - u2   切换到u2​输入密码  123456​

标准输出和错误输出

echo “aaabbccc”>aa.txt​>>文件续写​echo “aaabbbcc”>>aa.txt​意思是用>把内容输入到文档中。​head -1 /etc/rc.d/\* > aa.txt 2>bb.txt ​将标准输出和错误输出分别传到aa.txt和bb.txt​head -1 /etc/re.d/\* >aa.txt 2>&1 ​head -1 /etc/rc.d/\* >& aa.txt​将标准输出和错误输出合并到aa.txt​

Shell scripts

scripts脚本返回值 echo $?

返回值退出状态0(Zero)SuccessNon-zeroFailure2Incorrect usage126Not an executable127Command not found

​vim aa.sh 编辑aa.sh脚本​read -p "qing shu ru yong hu ming cheng " name​echo $name​sh aa.sh  运行aa,name脚本

只读变量

变量含义?最新执行的命令的退出状态-当前启用中的shell选项标记$当前shell的进程id(PID)!最新后台命令的进程ID(pid)_前一个命令的最后标记PPIDshell父进程的ID(PID)SHELLOPTS被冒号隔开的当前启用中的shell选项列表,和set -o命令结果一样UID当前用户的用户id

路径替换

~ */? []/[^] &

比较--针对文件

关于文件类型的判断,如:test -e filename

-e是否存在-f是否为文件-d是否为目录-b是否为block device-c是否为character device-S是否为socket-p是否为pipe文件-L是否为链接

比较--权限

关于文件权限的判断,如:test -r filename

-r文件是否可读-w文件是否可写-x文件是否可执行-u文件是否有SUID-g文件是否有SGID-k文件是否有Sticky bit-s文件是否非空

比较--新旧与大小

比较两个文件大小,命令 例如: test A -nt B

-ntA是否比B新-otA是否比B旧-efA是否和B是用一个文件,两个整数之间的判断。-eq两个数相等-ne两个数不等-gtA大于B-ltA小于B-geA大于等于B-leA小于等于B

Shell语法If语句格式

(number=num)

​read -p "请输入一个数字" num ​       if [ $num -eq 3 ]   (如果)​then​      echo "wo xiang ni"​elif [ $num -le 5 ]​     then (然后)         echo "zhen xiang le "​else [ $num -ge 6 ] (否则)​      echo "miss 531"​fi  (结束)​
闰年

第一版

​year=`date +%Y`​if [ $[ $year % 400 ] -eq 0 ]​then​echo "$year is a leap year."​elif [ $[ $year % 4 ] -eq 0 ]​then​if [ $[ $year % 100 ] -ne 0 ]​then​echo "$year is a leap year."​else​echo "$year is not a leap year."​fi​else​echo "$year is not a leap year."​fi​

第二版(原版)

​year=$(date +%Y)​if [ $[ $year % 400 ] -eq 0 ]​then​echo "$year is a leap year."​elif [ $[ $year % 4 ] -eq 0 ]​then​if [ $[ $year % 100 ] -ne 0 ]​then​echo "$year is a leap year."​else​echo "$year is not a leap year."​fi​else​echo "$year is not a leap year."​fi​

第三版(查询哪一年是闰年)

​read -p "shu ru nian fen" year​if [ $[ $year % 400 ] -eq 0 ]​then​echo "$year is a leap year."​elif [ $[ $year % 4 ] -eq 0 ]​then​if [ $[ $year % 100 ] -ne 0 ]​then​echo "$year is a leap year."​else​echo "$year is not a leap year."​fi​else​echo "$year is not a leap year."​fi​
FOR 循环

格式语法:for NAME in [ LIST ];do COMMANDS; done

列表 执行命令 结束

LIST用法

直接写1 2 3大括号{1..5}文件名/etc/*.conf命令结果find /etc/ -name "*.conf"C语言风格for ((i=0;i<5 i=i+2))i++

ping网段案例

ping.sh

for p in {1..10}    p---变量名称​do   do----执行内容​host=(192.168.18.$p)​ping -c2 192.168.18.$p >> /root/Desktop/2.txt  c2---频率​if [ $? == 0 ]​then​echo "$host is online."     在线​else​echo "$host is offline."   不在线​fi​done​
while循环
aa=1​while [ $aa -le 10 ]​do​echo "wo xiang ni le"​aa=$[$aa+1]​done​
case 判断
​aa=3      ( 3 变量值)​case "$aa" in   ​    1)         echo "haha";;  (1,2,4常量值)        2)         echo "heihei";;        3)      echo "nimei";; (有内容两;没有一个;)​esac​
break

终止当前for循环

​for n in {1..10}​do​        if [ $n -eq 3 ]            then                    break            fi            echo $n​done​

continue

跳出本次循环

for n in {1..10}​do​        if [ $n -eq 3 ]            then                   continue            fi            echo $n​done​
正则表达式

是指用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。就是用某种模式去匹配一类字符串的一个公式。

​touch bb.txt​grep “m*” bb.txt​
基本元字符集

grep -E = egrep

· 匹配任意单个字符。 如:rat、r、t。^ 匹配一行的开始$ 匹配一行的结尾匹配0个或多个前面的字符+ 匹配1个或者多个+前面的字符(需要\号,如grep -E “11+” /root/2)? 匹配0个或1个?之前的字符\ 转义[]匹配括号中的任何一个字符。如:[abc][^] 匹配不在括号中的,表示排除 如abc或者 grep -v [abc]< 匹配词的开始> 匹配词的结束。 如 <the>\。| 或。 例如 (him|her)

{m} 前面的表达式重复m次。如:“\w{2}”相当于“\w\w”。{m,n} 表达式至少重复m次,做多重复n次。如:“ba{1,3}”匹配“ba”或“baa”“baaa” "d{2,3}"{m,} 表达式至少重复m次\w 任意一个字母或数字或下划线\d 任意一个数字 grep [0-9] bb.txt\s 空格、制表符、换页符、空白符中的任意的一个。\b 匹配一个单词的边界。如:“.\b.” 以什么开头放后边 以什么结尾放前边

环境支持

命令或环境·[]^$( ){ }?+|( )vi×××××awk××××××××sed××××××grep××××××egrep×××××××××perl×××××××××

标签: #shell脚本执行成功返回值 echo