前言:
目前各位老铁们对“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 5Tab键 :自动补齐反斜杠\ :强制换行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 XXtar -xvf 解压 tar -xvf xxxx.tar.gz -C aaa 解压到指定目录打包压缩---- tar -zcvf解压 ----- tar -zxvf 指定位置解压--- tar -zxcf -Cxx.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换成news/old/new/g 整行替换 old换成new#,#s/old/new/g #到#行替换 old换成new%s/old/new/g 整篇替换 old换成newc 末尾加入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位二进制构成-------------------------------------------------------setupvim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0 网卡BOOTPROTO=none 是否自动获取IP ---> dhcpHWADDR=00:0c:29:d6:96:fb MAC地址ONBOOT=yes 是否随网络服务启动,eth0生效NETMASK=255.255.255.0 子网掩码IPADDR=192.168.18.76 IP地址TYPE=Ethernet 类型为以太网------------------------------------------------------修改DNSvim /etc/resolv.confsearch localdomainnameserver 192.168.40.2nameserver 202.106.0.20 联通nameserver 114.114.114.114nameserver 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. 挂载光盘镜像到/mntmount /dev/cdrom /mnt 2. 配置yum源vim /etc/yum.repos.d/xxx.repo[xxx]baseurl=(flie本地)enabled=1(是否启动文件 0否 1是)gpgcheck=03. 安装 yum -y install 软件名称 (vsftpd)4. 重启yum service vsftpd start
服务器Yum
------服务器yum0、命令: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 磁盘分区指令 ml list known partition 列出所有的分区n add a new partition 创建一个新的分区p print the partition table 打印分区内容t change a partition's system id 改变分区系统idw 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/sdb1mkfs 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先缩小文件系统再缩小lve2fsck -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/sdb2lv 使用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 损坏磁盘bmdadm -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.confmdadm -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 挂载镜像文件到/mntls /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文件到htmlcd /dav/www/html ls 切换到html 查看是否有upload文件(恢复快照)重新配置ipvim /etc/sysconfig/network-scripts/ifcfg-eth0ifdown eth0 && ifup ethoping通(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; 创建 hehegrant all on hehe.\* to ‘hh’@‘localhost’ identified by ‘123456’; (密码 ,授权)数据库名:hehe数据库用户名:hh密码:123456错误情况方案整理:
1、数据库模版错误 yum -y install php-\*2、安装http中过程中途停止 yum -y install httpd-devel3、安装mysql时出错 yum -y install mysql-connector-odbc4、想卸载已安装http(apache)时,需在挂载镜像。 yum -y remove http\*5、配置yum(配置服务器中文包)yum install fonts-chinese.noarchyum install m17n-db-common-cjkyum 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.221cd /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.repor /etc/yum.repos.d/rhel-debuginfo.repoyum -y install samba
编辑文件
cd /etc/samba/ 切换vim smb.conf 配置文件
vim /etc/samba/smb.confsecurity=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.txtsh aa.sh #运行aa.sh脚本echo $$ 查看当前进程号 bash 进入另一个shellexit 退出
history 历史
语法替换!!前一个命令!n命令号n!-n倒数第n个命令!cmd最后用来启动cmd的命令
多命令运行
#!/bin/sh 注释信息,可写可不写echo $? 返回值:通过$?变量进行查看,返回0成功,不成功则返回非0值!有条件的链接命令&& 把两个命令链接在一起,只有第一个命令成功执行时,才会执行第二个命令。|| 把两个命令链接在一起,只有第一个命令失败时,才会执行第二个命令。
Bash变量
例如:aa=DataScienceecho $aa 则会显示DataScienceShell变量
A和B A=123 B=234echo a:$A b:$B 显示AB变量内容a:123 b:234export A 将A变量提升为环境变量bashpsecho 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:234unset 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=234echo $(($a+$b)) ----- a+b357 ---------- 结果2、计算器Scale=2 保留几位小数, %取余。Quit 退出计算器 \:反斜杠 转义字符创建时间文档
date +%Y%m%d
语法作用\避免下一个字符被shell解释“”避免双引号内除了S、!和(反引号)字符以外的其它字符被shell解释‘’避免单引号内的字符被shell解释
alias 命令 Shell别名可创建扩展(替换)为任意文本的命令alias NAME=aunalias 取消 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 切换到u1su - u2 切换到u2输入密码 123456
标准输出和错误输出
echo “aaabbccc”>aa.txt>>文件续写echo “aaabbbcc”>>aa.txt意思是用>把内容输入到文档中。head -1 /etc/rc.d/\* > aa.txt 2>bb.txt 将标准输出和错误输出分别传到aa.txt和bb.txthead -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 " nameecho $namesh 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 ]thenecho "$year is a leap year."elif [ $[ $year % 4 ] -eq 0 ]thenif [ $[ $year % 100 ] -ne 0 ]thenecho "$year is a leap year."elseecho "$year is not a leap year."fielseecho "$year is not a leap year."fi
第二版(原版)
year=$(date +%Y)if [ $[ $year % 400 ] -eq 0 ]thenecho "$year is a leap year."elif [ $[ $year % 4 ] -eq 0 ]thenif [ $[ $year % 100 ] -ne 0 ]thenecho "$year is a leap year."elseecho "$year is not a leap year."fielseecho "$year is not a leap year."fi
第三版(查询哪一年是闰年)
read -p "shu ru nian fen" yearif [ $[ $year % 400 ] -eq 0 ]thenecho "$year is a leap year."elif [ $[ $year % 4 ] -eq 0 ]thenif [ $[ $year % 100 ] -ne 0 ]thenecho "$year is a leap year."elseecho "$year is not a leap year."fielseecho "$year is not a leap year."fiFOR 循环
格式语法: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 ]thenecho "$host is online." 在线elseecho "$host is offline." 不在线fidonewhile循环
aa=1while [ $aa -le 10 ]doecho "wo xiang ni le"aa=$[$aa+1]donecase 判断
aa=3 ( 3 变量值)case "$aa" in 1) echo "haha";; (1,2,4常量值) 2) echo "heihei";; 3) echo "nimei";; (有内容两;没有一个;)esacbreak
终止当前for循环
for n in {1..10}do if [ $n -eq 3 ] then break fi echo $ndone
continue
跳出本次循环
for n in {1..10}do if [ $n -eq 3 ] then continue fi echo $ndone正则表达式
是指用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。就是用某种模式去匹配一类字符串的一个公式。
touch bb.txtgrep “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