常用shell脚本指令
xshell常用的20个命令
xshell常用的20个命令Xshell是一款功能强大的终端仿真软件,它可以帮助您轻松的连接到远程服务器和设备,以满足您的远程管理需求。
Xshell提供了非常多的有用的功能,其中包括自动完成和命令建议功能。
本文将介绍Xshell常用的20个命令,它们可以帮助您更轻松地使用Xshell。
1.ls:ls是一个常用的文件管理命令,用于显示当前目录下的文件和子目录的列表。
您可以使用该命令查看文件的大小、修改日期和文件权限等信息。
2.cd:cd命令用于更改当前的目录,您可以使用该命令进入到更深层次的目录。
3.pwd:pwd命令用于显示当前所在目录的路径,使用该命令可以确定当前所在的文件夹位置。
4.touch:touch命令用于创建一个新文件或更新文件的时间戳。
5.mkdir:mkdir命令用于创建新目录,您可以使用该命令在当前目录下创建新子目录。
6.rmdir:rmdir命令用于删除空目录,使用该命令可以删除不需要的空目录。
7.cat:cat命令用于显示文件的内容。
您可以使用该命令查看文件的内容,以及将多个文件的内容拼接到一起。
8.more:more命令用于显示文件的内容,不同之处在于每次只显示一屏的内容,您可以使用空格键进入下一屏的内容。
9.head:head命令用于显示文件的前几行内容,您可以指定要显示多少行内容,也可以使用该命令查看文件的头部。
10.tail:tail命令用于显示文件的最后几行内容,您可以指定要显示多少行内容,也可以使用该命令查看文件的尾部。
11.grep:grep命令用于搜索文件中指定的字符串,您可以使用该命令查找特定的字符串或者模式在文件中出现的次数。
12.find:find命令用于搜索指定的文件或者目录,您可以在指定的路径中搜索文件名称、日期、大小等信息。
13.cp:cp命令用于复制文件或目录,您可以使用该命令将文件或目录从一个位置复制到另一个位置。
14.mv:mv命令用于移动文件或者目录,您可以使用该命令将文件从一个位置移动到另一个位置。
Shell命令大全
Shell命令⼤全⼀、Linux下常⽤命令:⽂件与⽬录操作basename:从⽂件名中去掉路径和扩展名cd:切换当前⼯作⽬录到指定⽬录chgrp:改变⽂件所属组chmod:改变⽂件的权限chown:改变⽂件的所有者和组cp:复制⽂件或⽬录dd:复制⽂件并转换⽂件内容file:确定⽂件类型find:在指定⽬录下查找⽂件并执⾏指定的操作ln:创建⽂件链接locate/slocate:快速定位⽂件的路径ls/dir/vdir:显⽰⽬录内容mkdir:创建⽬录mv:移动或重命名⽂件pwd:显⽰当前⼯作⽬录rename:重命名⽂件rm:删除⽂件或⽬录rmdir:删除空⽬录touch:修改⽂件的时间属性updatedb:创建或更新slocate数据库whereis:显⽰指令程序、源代码和man⼿册页which:显⽰指令的绝对路径⼆、Linux下常⽤命令:备份与压缩ar:创建、修改归档⽂件和从归档⽂件中提取⽂件arj:.arj⽂件压缩指令bunzip2:压缩bzip2格式的压缩⽂件bzcat:解压缩⽂件到标准输出bzip2:创建.bz2格式的压缩⽂件bzip2recover:修复损坏的.bz2⽂件bzless/bzmore:解压缩.bz2⽂件并分屏显⽰内容compress:压缩数据⽂件cpio:存取归档包中的⽂件dump:⽂件系统备份gunzip:解压缩由gzip压缩的⽂件gzexe:压缩可执⾏程序gzip:GNU的压缩和解压缩⼯具lha:压缩和解压缩指令resotre:还原由dump备份的⽂件或⽂件系统tar:创建备份档案⽂件unarj:解压缩.arj⽂件uncompress:解压缩.Z⽂件unzip:解压缩.zip⽂件zcat:解压缩⽂件并送到标准输出zforce:强制gzip格式的⽂件加上.gz扩展名zip:压缩⽂件zipinfo:显⽰zip压缩⽂件的详细信息znew:将“.Z”⽂件转换成“.gz”⽂件三、Linux下常⽤命令:⽂本处理cat:链接⽂件并显⽰到标准输出cksum:检查和计算⽂件循环冗余校验码cmp:⽐较两个⽂件的差异col:过滤控制字符colrm:从输⼊中过滤掉指定的列comm:⽐较两个有序⽂件的不同csplit:分割⽂件cut:显⽰⽂件中每⾏的指定内容diff3:⽐较3个⽂件的不同diff:⽐较并显⽰两个⽂件的不同diffstat:根据diff指令的结果显⽰统计信息ed:⾏⽂本编辑器emacs:全屏⽂本编辑器ex:⽂本编辑器expand:将Tab转换为空⽩(Space)fmt:最优化⽂本格式fold:设置⽂件显⽰的⾏宽grep/egrep/fgrep:显⽰⽂件中匹配的⾏head:输出⽂件开头部分内容ispell:交互式拼写检查程序jed:⽂本编辑器joe:编辑⽂本⽂件join:合并两个⽂件的相同字段less:分屏查看⽂本⽂件look:显⽰⽂件中以特定字符串开头的⾏more:分屏查看⽂本⽂件od:以数字编码输出⽂件内容paste:合并⽂件的内容pico:⽂本编辑器sed:流⽂件编辑器sort:排序数据⽂件spell:拼写检查split:分割⽂件sum:计算并显⽰⽂件的校验码tac:反序显⽰⽂件内容tail:输出⽂件尾部部分内容tee:将输⼊内容复制到标准输出和指定⽂件tr:转换或删除⽂件中的字符unexpand:将空⽩(Space)转换为Tabuniq:删除⽂件中的重复⾏vi:全屏⽂本编辑器wc:计算⽂件的字节数、单词数和⾏数四、Linux下常⽤命令:shell指令alias:定义命令别名bg:将作业(或任务)放到后台运⾏bind:显⽰或设置键盘配置declare:声明shell变量dirs:显⽰shell⽬录堆栈中的记录echo:打印字符串到标准输出enable:激活与关闭shell内部命令eval:执⾏指定指令并返回结果exec:执⾏给定指令后退出登录exit:退出当前shellexport:设置与显⽰环境变量fc:编辑并执⾏历史命令fg:将后台任务(或作业)切换到前台运⾏hash:显⽰与清除指令时运⾏查询的哈希表history:显⽰与操纵历史命令jobs:显⽰shell的作业信息kill:杀死进程或作业logout:退出登录shellpopd:从shell⽬录堆栈中删除记录pushd:向shell⽬录堆栈中添加记录set:设置shell的执⾏⽅式shopt:设置控制shell⾏为变量的开关值ulimit:设置shell的资源限制umask:设置创建⽂件的权限掩码unalias:取消由alias定义的命令别名unset:删除定义的变量或函数五、Linux下常⽤命令:打印相关指令accept:接受打印请求cancel:取消打印任务disable:停⽌打印机enable:启动打印机lp:打印⽂件lpadmin:配置cups打印机和类lpc:控制打印机lpq:显⽰当前打印队列lpr:打印⽂件lprm:删除当前打印队列中的作业lpstat:显⽰CUPS的状态信息pr:打印前转换⽂本格式reject:拒绝打印请求六、Linux下常⽤命令:其他基础指令bc:实现精确计算的计算器cal:显⽰⽇历clear:清屏指令consoletype:显⽰当前使⽤的终端类型ctrlaltdel:设置热键Ctrl+Alt+Del的功能date:显⽰和设置系统⽇期时间dircolors:设置ls指令显⽰时的颜⾊eject:弹出可移动设备的介质halt:关闭计算机hostid:显⽰当前主机的数字标识hwclock:查询和设置系统硬件时钟info:读取帮助⽂档login:登录系统man:显⽰联机帮助⼿册md5sum:计算并显⽰⽂件的md5摘要信息mesg:设置终端写权限mtools:显⽰mtools软件包的指令mtoolstest:测试并显⽰mtools⼯具包的配置poweroff:关闭计算机并切断电源reboot:重新启动计算机shutdown:关闭计算机sleep:睡眠指定长的时间stat:显⽰⽂件或⽂件系统的状态talk:与其他⽤户交谈wall:向所有终端发送信息whatis:在数据库中查询关键字who:显⽰当前已登录⽤户的信息whoami:显⽰当前⽤户名write:向指定⽤户终端发送信息yes:不断输出指定字符串七、Linux下常⽤命令:⽤户管理chfn:改变⽤户的finger信息chsh:改变⽤户登录时的默认shellfinger:⽤户信息查询程序gpasswd:管理组⽂件/etc/groupgroupadd:创建组groupdel:删除组groupmod:修改组信息groups:显⽰⽤户所属的组grpck:验证组⽂件/etc/group的完整性grpconv:启⽤组的影⼦⼝令⽂件grpunconv:关闭组的影⼦⼝令⽂件logname:显⽰登录⽤户名passwd:设置⽤户密码pwck:验证⽤户⽂件密码⽂件的完整性pwconv:启⽤⽤户的影⼦⼝令⽂件pwunconv:关闭⽤户的影⼦⼝令⽂件su:切换⽤户useradd:创建⽤户userdel:删除⽤户usermod:修改⽤户的配置信息users:显⽰当前登录系统的⽤户名⼋、Linux下常⽤命令:进程管理init:进程初始化控制killall:根据名称结束进程nice:设置进程优先级nohup:以忽略挂起信号⽅式运⾏程序pgrep:基于名字查询并显⽰进程号pidof:查找正在运⾏程序的进程号pkill:向指定的进程发送信号ps:显⽰系统当前的进程状态pstree:⽤树形图显⽰进程的⽗⼦关系renice:调整进程优先级w:显⽰当前登录⽤户的相关信息watch:全屏⽅式显⽰指定命令的输出信息九、Linux下常⽤命令:磁盘与⽂件系统管理badblocks:磁盘坏块检查⼯具blockdev:从命令⾏调⽤块设备的ioctl函数chattr:改变⽂件的第2扩展⽂件系统属性convertquota:转换quota⽂件格式df:报告磁盘剩余空间情况dumpe2fs:显⽰ext2/ext3⽂件系统信息e2fsck:检查ext2/ext3⽂件系统e2image:保存ext2/ext3源数据到⽂件e2label:设置ext2/ext3⽂件系统标签edquota:编辑⽤户的磁盘空间配额fdisk:Linux下的分区⼯具findfs:查找⽂件系统fsck:检查与修复Linux⽂件系统grub:Linux下的引导加载器hdparm:调整硬盘I/O性能lilo:Linux加载器lsattr:显⽰⽂件的ext2⽂件系统属性mkbootdisk:为当前系统创建专门的引导软盘mke2fs:创建第2扩展⽂件系统mkfs:创建各种⽂件系统mkinitrd:创建初始化ram磁盘映像⽂件mkisofs:创建光盘映像⽂件mknod:创建块设备或字符设备⽂件mkswap:创建交换分区⽂件系统mktemp:创建临时⽂件mount:加载⽂件系统parted:磁盘分区管理⼯具quota:显⽰⽤户磁盘配额quotacheck:创建、检查和修复配额⽂件quotaoff:关闭⽂件系统的磁盘配额功能quotaon:打开⽂件系统的磁盘配额功能quotastat:显⽰磁盘配额状态repquota:显⽰⽂件系统磁盘配额信息报表swapoff:关闭交换空间swapon:激活交换空间sync:强制将缓存数据写⼊磁盘tune2fs:调整ext2/ext3⽂件系统的参数umount:卸载已经加载的⽂件系统⼗、Linux下常⽤命令:内核与性能depmod:处理内核可加载模块的依赖关系dmesg:显⽰内核的输出信息free:显⽰内存使⽤情况insmod:加载模块到内核iostat:报告CPU、I/O设备及分区状态ipcs:显⽰进程间通信的状态信息kernelversion:显⽰内核主版本号lsmod:显⽰已加载的模块modinfo:显⽰内核模块信息modprobe:加载内核模块并解决依赖关系mpstat:显⽰进程相关状态信息rmmod:从内核中删除模块sar:收集、显⽰和保存系统活动信息slabtop:实时显⽰内核的slab缓存信息sysctl:运⾏时修改内核参数tload:监视系统平均负载情况top:显⽰和管理系统进程uname:显⽰系统信息uptime:显⽰系统运⾏时间及平均负载vmstat:显⽰虚拟内存的状态⼗⼀、Linux下常⽤命令:X-Window系统startx:初始化X-Window会话xauth:X系统授权许可⽂件管理⼯具xhost:显⽰和配置X服务器的访问权限xinit:X-Window系统初始化程序xlsatoms:显⽰X服务器原⼦数据定义xlsclients:显⽰指定显⽰器上运⾏的X程序xlsfonts:显⽰X服务器使⽤的字体信息xset:设置X系统的⽤户偏爱属性⼗⼆、Linux下常⽤命令:系统安全chroot:以指定根⽬录运⾏指令nmap:⽹络探测⼯具和安全扫描器scp:加密的远程复制⼯具sftp:安全⽂件传输⼯具slogin:加密的远程登录⼯具ssh:加密的远程登录⼯具sudo:以另⼀个⽤户⾝份执⾏指令⼗三、Linux下常⽤命令:编程相关指令awk/gawk:模式扫描与处理语⾔expr:计算表达式的值gcc:GNU的C语⾔编译器gdb:GNU调试器ldd:显⽰共享库依赖make:⼯程编译⼯具nm:显⽰⽬标⽂件的符号表perl:perl语⾔的命令⾏⼯具php:PHP脚本语⾔命令⾏接⼝test:条件测试⼗四、Linux下常⽤命令:其他系统管理与维护指令arch:显⽰当前主机的硬件架构at:按照时间安排任务的执⾏atq:查询待执⾏的任务atrm:删除待执⾏的任务batch:在指定时间运⾏任务chkconfig:设置系统在不同运⾏等级下所执⾏的服务crontab:按照时间设置计划任务last:显⽰以前登录过系统的⽤户相关信息lastb:显⽰登录系统失败的⽤户相关信息logrotate:系统⽇志的轮循⼯具logsave:将命令的输出信息保存到⽇志⽂件logwatch:报告和分析系统⽇志lsusb:显⽰所有的USB设备patch:补丁与更新⽂件rpm:Red Hat软件包管理器runlevel:显⽰当前系统的运⾏等级service:Linux服务管理和控制⼯具telinit:切换当前系统的运⾏等级yum:RPM软件包⾃动化管理⼯具⼗五、Linux下常⽤命令:⽹络配置dnsdomainname:显⽰系统的DNS域名domainname:显⽰和设置主机域名hostname:显⽰或者设置系统主机名ifcfg:配置⽹络接⼝ifconfig:配置⽹络接⼝的⽹络参数ifdown:关闭指定⽹络接⼝ifup:启动指定⽹络接⼝nisdomainname:显⽰和设置主机域名route:显⽰与操纵本机的IP路由表ypdomainname:显⽰和设置主机域名⼗六、Linux下常⽤命令:⽹络测试与应⽤arp:管理本机arp缓冲区arping:向相邻主机发送ARP请求报⽂arpwatch:监听⽹络上的ARP信息dig:域名查询⼯具elinks:纯⽂本⽹页浏览器elm:电⼦邮件客户端程序ftp:⽂件传输协议客户端host:DNS域名查询⼯具ipcalc:IP地址计算器lynx:纯⽂本⽹页浏览器mail:电⼦邮件管理程序ncftp:增强的FTP客户端⼯具netstat:显⽰⽹络状态nslookup:DNS域名查询⼯具pine:电⼦邮件和新闻组处理程序ping:测试到达⽬标主机的⽹络是否通畅rsh:远程shelltelnet:远程登录⼯具tftp:简单⽂件传输协议客户端tracepath:追踪数据经过的路由traceroute:追踪数据包到达⽬的主机经过的路由wget:从指定URL地址下载⽂件⼗七、Linux下常⽤命令:⾼级⽹络指令arptables:管理内核的ARP规则表ip:强⼤的多功能⽹络配置⼯具iptables:IP包过滤与NAT管理⼯具iptables-save:保存内核中iptables的配置iptables-restore:还原iptables的配置信息tcpdump:监听⽹络流量⼗⼋、Linux下常⽤命令:⽹络服务器指令ab:Web服务器性能测试apachectl:Apache HTTP服务器控制接⼝exportfs:管理NFS服务器共享的⽂件系统htdigest:管理⽤于摘要认证的⽤户⽂件htpasswd:管理⽤于基本认证的⽤户⽂件httpd:Apache超⽂本传输协议服务器mailq:显⽰待发送的邮件队列mysql:MySQL服务器的客户端⼯具mysqladmin:MySQL服务器管理⼯具msqldump:MySQL服务器备份⼯具mysqlimport:MySQL数据库导⼊⼯具mysqlshow:显⽰MySQL数据库、表和字段信息nfsstat:显⽰⽹络⽂件系统状态sendmail:电⼦邮件传送代理程序showmount:显⽰NFS服务器上的加载信息smbclient:samba服务器客户端⼯具smbmount:加载samba⽂件系统smbpasswd:改变samba⽤户的密码squid:HTTP代理服务器程序sshd:OpenSSH守护进程。
xshell常用的20个命令
xshell常用的20个命令XShell是一款桌面式终端模拟器,它能够提供一种跨平台连接网络的方法,可以在Windows、Linux和Mac OS之间轻松地进行连接。
由于其功能强大,XShell在远程连接服务器方面占据了一席之地。
本文将通过介绍XShell中最常用的20个命令,来帮助您更好地使用XShell中的功能。
1. exit:结束当前连接并退出XShell。
2. help:显示帮助,说明XShell支持的命令,选项,提供简要说明。
3. open:用于连接指定的网络,它支持用户名和密码,以及其他认证方法。
4. close:用于断开当前的网络连接。
5. connect:与特定的远程端口建立连接,而且还可以指定一些参数。
6. disconnect:断开连接,但不会断开XShell会话。
7. re-connect:根据当前XShell会话重新建立连接。
8. telnet:在XShell会话中使用Telnet协议,这样可以建立一个临时连接,以连接到网络服务器。
9. sftp:使用SFTP协议上传或下载文件。
10. scp:使用Secure Copy Protocol协议来远程复制文件到或从远程系统中。
11. ssh:使用Secure Shell协议建立安全连接,以允许远程用户登录到系统并执行指定的任务。
12. cd:切换目录,类似在DOS中的cd命令。
13. ls:列出当前目录中的文件,类似于DOS中的dir命令。
14. pwd:显示当前工作目录,类似于DOS中的pwd命令。
15. mv:移动或重命名文件/目录,类似于DOS中的move命令。
16. cp:复制文件或目录,类似于DOS中的copy命令。
17. rm:删除文件或目录,类似于DOS中的del命令。
18. grep:在文件中搜索文本,类似于DOS中的find命令。
19. wc:显示文件中的字符数,单词数和行数,类似于 DOS中的type命令。
Shell脚本技巧
Shell脚本技巧1.test测试命令test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:(1)数值测试:-eq:等于则为真-ne:不等于则为真-gt:大于则为真-ge:大于等于则为真-lt:小于则为真-le:小于等于则为真(2)字符串测试:=:等于则为真!=:不相等则为真-z 字符串:字符串长度伪则为真-n 字符串:字符串长度不伪则为真(3)文件测试:-e 文件名:如果文件存在则为真-r 文件名:如果文件存在且可读则为真-w 文件名:如果文件存在且可写则为真-x 文件名:如果文件存在且可执行则为真-s 文件名:如果文件存在且至少有一个字符则为真-d 文件名:如果文件存在且为目录则为真-f 文件名:如果文件存在且为普通文件则为真-c 文件名:如果文件存在且为字符型特殊文件则为真-b 文件名:如果文件存在且为块特殊文件则为真另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,其优先级为:“!”最高,“-a”次之,“-o”最低。
同时,bash也能完成简单的算术运算,格式如下:$[expression]例如:var1=2var2=$[var1*10+1]则:var2的值为21。
2.if条件语句if [ -x /sbin/quotaon ]; thenecho "Turning on Quota for root filesystem"/sbin/quotaon /elif [ -x /sbin/quotaon ]; then/usr/bin/bashelseecho "ok"fi3.for 循环#!/bin/shWORD="a b c d e f g h i j l m n o p q r s t u v w x y z"for i in $WORD ; doecho $idone#!/bin/shFILES=`ls /txt/*.txt`for txt in $FILES ; dodoc=`echo $txt | sed "s/.txt/.doc/"`mv $txt $docdone4.while和until 循环#!/bin/shwhile [ -f /var/run/ppp0.pid ] ; dokillall pppddone#!/bin/shuntil [ -f /var/run/ppp0.pid ] ; dosleep 1doneShell还提供了true和false两条命令用于建立无限循环结构的需要,它们的返回状态分别是总为0或总为非05.case 条件选择#!/bin/shcase $1 instart | begin)echo "start something";;stop | end)echo "stop something";;*)echo "Ignorant";;esaccase表达式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。
sh命令的用法
sh命令是Shell命令的简称,用于在Unix和类Unix操作系统上执行命令。
它是一种解释性语言,通过读取命令并将其传递给操作系统来执行。
以下是一些常见的sh命令用法:
运行脚本文件:通过sh命令可以运行Shell脚本文件。
语法如下:
php
sh <脚本文件名>
例如,要运行名为"script.sh"的脚本文件,可以使用以下命令:
bash
sh script.sh
执行命令:sh命令可以用来执行任何在Shell中可用的命令。
语法如下:
php
sh -c <命令>
例如,要在当前Shell中打印"Hello World!",可以使用以下命令:
bash
sh -c "echo Hello World!"
交互模式:通过使用-i选项,可以让sh命令进入交互模式。
这将打开一个Shell提示符,允许用户交互式地输入命令。
语法如下:
bash
sh -i
脚本中调用命令:在Shell脚本中,可以使用sh命令来调用其他Shell命令或脚本。
语法如下:
php
sh <命令或脚本> <参数>
例如,要在脚本中调用另一个脚本,可以使用以下语法:
bash
sh another_script.sh arg1 arg2
这些是sh命令的一些常见用法。
shell脚本常用命令
shell脚本常⽤命令shell基本命令1.#!/bin/sh是指此脚本使⽤/bin/sh来解释执⾏。
解释:#! 是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏,即使⽤哪⼀种 Shell。
2.echo 命令⽤于向窗⼝输出⽂本。
举例:echo "Hello World !"3.your_name="qinjx"赋值变量echo ${your_name}打印变量;使⽤变量的时候加括号和美元符4.chmod +x ./test.sh #使脚本具有执⾏权限./test.sh #执⾏脚本chmod 777 /tmp -R 意思是把tmp⽂件夹及其⼦bai⽂件夹的权限全部修改为777解释语句⼀:ping -c 5 > /dev/null 2>&11. ping -c 5 -c<完成次数>:设置完成要求回应的次数;2. >/dev/null这条命令的作⽤是将标准输出1重定向到/dev/null中。
/dev/null代表linux的空设备⽂件,所有往这个⽂件⾥⾯写⼊的内容都会丢失,俗称“⿊洞”。
那么执⾏了>/dev/null之后,标准输出就会不再存在,没有任何地⽅能够找到输出的内容。
3. 2>&1这条命令⽤到了重定向绑定,采⽤&可以将两个输出绑定在⼀起。
这条命令的作⽤是错误输出将和标准输出同⽤⼀个⽂件描述符,说⼈话就是错误输出将会和标准输出输出到同⼀个地⽅。
linux在执⾏shell命令之前,就会确定好所有的输⼊输出位置,并且从左到右依次执⾏重定向的命令,所以>/dev/null 2>&1的作⽤就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重⽤了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。
执⾏了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到⽂件中。
shell脚本介绍以及常用命令
shell脚本介绍以及常⽤命令Shell脚本Shell Script,Shell与Windows/Dos下的相似,也就是⽤各类命令预先放⼊到⼀个⽂件中,⽅便⼀次性执⾏的⼀个,主要是⽅便进⾏设置或者管理⽤的。
但是它⽐Windows下的批处理更强⼤,⽐⽤其他编程的程序效率更⾼,毕竟它使⽤了Linux/Unix下的命令。
换⼀种说法也就是,shell script是利⽤shell的功能所写的⼀个程序,这个程序是使⽤,将⼀些shell的语法与指令写在⾥⾯,然后⽤正规表⽰法,管线命令以及数据流重导向等功能,以达到我们所想要的处理⽬的shell和shell脚本的区别:shell是什么呢?确切⼀点说,Shell就是⼀个,它的作⽤就是遵循⼀定的语法将输⼊的命令加以解释并传给系统。
它为⽤户提供了⼀个向Linux发送请求以便运⾏程序的接⼝系统级程序,⽤户可以⽤Shell来启动、挂起、停⽌甚3⾄是编写⼀些程序。
Shell本⾝是⼀个⽤C语⾔编写的程序,它是⽤户使⽤Linux的桥梁。
Shell既是⼀种命令语⾔,⼜是⼀种(就是你所说的shell脚本)。
作为命令语⾔,它互动式地解释和执⾏⽤户输⼊的命令;作为程序设计语⾔,它定义了各种和参数,并提供了许多在⾼阶语⾔中才具有的控制结构,包括循环和分⽀。
它虽然不是 Linux系统的⼀部分,但它调⽤了系统内核的⼤部分功能来执⾏程序、创建⽂档并以并⾏的⽅式协调各个程序的运⾏。
交互式shell和⾮交互式shell 交互式模式就是shell等待你的输⼊,并且执⾏你提交的命令。
这种模式被称作交互式是因为shell与⽤户进⾏交互。
这种模式也是⼤多数⽤户⾮常熟悉的:登录、执⾏⼀些命令、签退。
当你签退后,shell也终⽌了。
shell也可以运⾏在另外⼀种模式:⾮交互式模式。
在这种模式下,shell不与你进⾏交互,⽽是读取存放在⽂件中的命令,并且执⾏它们。
当它读到⽂件的结尾,shell也就终⽌了。
Linux13:shell脚本基本命令
Linux13:shell脚本基本命令shell脚本基本命令输出命令echo输出命令echo,基本模式就是echo [选项] [输出内容]输出内容如果包含空格,则必须将内容⽤双引号括起来。
选项-e可以使输出语句⽀持反斜线转义。
加⼊退格后就不会显⽰退格符左边的⼀个字符。
ascii码表中有对应的⼋进制和⼗六进制表⽰法,所以可以表⽰对应的字符。
显⽰环境变量的值:echo ${PATH}或echo $PATH,如果⼀个变量没有被设定,那么就什么都不返回。
颜⾊输出如将abcd⽤红⾊打印:echo -e "\e[1;31m abcd \e[0m"其中\e[1的意思是开启颜⾊输出,⽽\e[0m是结束颜⾊输出,31m代表红⾊,abcd是输出内容,其他颜⾊如下:第⼀个脚本与脚本执⾏⽅式新建⼀个脚本hello.sh:#!/bin/bash#the first programecho "hello world"exit 0其中第⼀⾏是声明,不是注释,不能省略,这是在指定使⽤哪个shell,如果没有这⾏有的程序可能⽆法执⾏。
第⼆⾏#开头的是注释,第四⾏是命令。
最后⼀⾏在设置回传值,在执⾏完该脚本后,执⾏echo $?就能查看这个值,可以通过这个⾃定义错误信息。
在脚本中有需要时要重新定义⼀下PATH环境变量,以便直接使⽤⼀些外部命令⽽不是写绝对路径:PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/root/bin export PATH执⾏shell脚本要先赋予其可rx权限:chomd 755 hello.sh然后再执⾏./hello.sh这⾥也可以⽤绝对路径执⾏。
sh常用指令
sh常用指令
sh是一种常见的Shell,也是许多其他Shell的基础。
常用的sh指令有:
- `-c`:执行命令字符串,例如`sh -c "echo Hello World"`。
- `-f`:从脚本文件中读取命令并执行,例如`sh -f script.sh`。
- `-i`:在执行脚本之前进入交互式模式,例如`sh -i script.sh`。
- `-l`:使Shell能够以登录Shell方式启动,例如`sh -l`。
- `-n`:不执行命令,只检查语法错误,例如`sh -n script.sh`。
- `-t`:设置Shell在执行命令之前会输出调试信息,例如`sh -t script.sh`。
- `-v`:在Shell执行命令时输出额外的详细信息,例如`sh -v script.sh`。
- `-x`:打印出Shell将要执行的每个命令和其参数,以便进行调试,例如`sh -x script.sh`。
这些指令可以组合使用,以满足不同的需求。
在使用sh命令时,可以根据具体情况选择合适的参数,以获得更好的效果。
详解adbshell常用命令
详解adbshell常⽤命令⼀、⽂件操作相关命令1.⽂件操作命令⼦命令参数说明cd⽆进⼊⽬录cat[-beflnstuv] [-B bsize] [file...]查看⽂件内容-n:显⽰⾏号-b:显⽰⾏号,但会忽略空⾏-s:显⽰⾏号,连续空⾏标记为⼀⾏df⽆列出分区列表du[-H] [-L] [-P] [-a] [-d depth] [-s] [-cghikmnrx] [file...]查询⽂件或⽬录的磁盘使⽤空间ls[-a] [-i] [-l] [-n] [-s]列出⽬录内容-a:列出所有⽂件,包括隐藏⽂件-i:输出⽂件的i节点的索引信息-l列出⽂件的详细信息-n:⽤数字的GUID代替名称-s:输出该⽂件的⼤⼩grep [-abcDEFGHhliJLlmnOoPqRSsUVvwxZz][-A num][-B num][-C[num][-e pattern][-f file][--binary-files=value][--color=when][--context=num][--directories=action][--lable][--line-buffered][pattern] [file...]指定⽂件中搜索特定的内容,并将含有这些内容的⾏标准输出mkdir-p,-parents创建⽬录-p,--parents:递归创建⽬录touch touch [-alm] [-t YYYYMMDD [.HHMMSS]] < file >创建⽂件rm rm [-f\|-i][-dPRrvWx]file 删除⽂件-f:强制删除⽂件,系统不提⽰-i:交互式删除,删除前提⽰-d:改变硬连接数据删成0,删除该⽂件-r:强制删除⽂件夹包括⾥⾯的⽂件mv mv[-fiv]source target 移动⽂件(相当于剪切)-f:强制移动,若⽂件已经存在⽬标则直接覆盖-i:若⽬标⽂件已经存在,会询问是否覆盖rmdir rmdir[-p] directory删除⽬录-p:递归删除⽬录,只能删除空⽬录dd dd[operand...]dd if =source of=targe复制⽂件2.⽂件权限命令与其他⽂件命令⼦命令参数说明chomd chomd[OPTION]< MODE > < FILE>⽂件权限修改-R:递归改变⽂件和⽬录-h:不遵循符号连接chown chown[-R[-H\|-L\|-P]] [-fhv]owner : group | owner | : group file更改某个⽂件或⽬录的属主和属组md5md5 file...查询⽂件的MD5值mount mount [-r] [-w] [-o options] [-t type]挂载设备信息umount卸载分区挂载cmp要指出两个⽂件是否存在差异ln⽤来在⽂件之间创建连接,创建连接后两个⽂件中任意⼀个⽂件改变⽂件内容另⼀⽂件都会相应进⾏同步改变3.命令使⽤实例://进⼊设备adb shell//进⼊指定⽬录"/data/local/tmp"cd /data/local/tmp//查看⽬录ls//进⼊根⽬录cd ///进⼊指定⽬录"/data/local/tmp"cd /data/local/tmp//查看分区列表df//在当前⽬录下创建名为1的.txt⽂件(再创建个两个,命名为2和3,⽅便后⾯继续学习使⽤)touch 1.txt//列出所有⽂件(包括隐藏⽂件)的详细信息,此时可以查看刚刚的1.txt是否创建成功ls -al//在当前⽬录下创建⼀个名为1的⽂件夹mkdir1//列出所有⽂件(包括隐藏⽂件)的详细信息,此时可以查看刚刚的⽬录⽂件夹是否创建成功ls -al//在当前⽬录下创建递归⽬录,2下⾯包含3,3下⾯包含4mkdir -p 2/3/4//回到上⼀级⽬录,连续操作两次让他回到cd /data/local/tmp⽬录下cd ..//将1.txt⽂件移动到1⽬录中(剪切效果)mv 1.txt 1//进⼊1⽬录cd 1//查看1.txt是否移动进去了ls//返回上⼀级⽬录cd ..//将当前⽬录下的2.txt⽂件复制到名为2的⽬录下并命名为2.txtdd if=2.txtof=2/22.txt//进⼊到⽬录2中cd 2//查看上个⽂件操作是否操作成功ls//回到上⼀级⽬录cd ..//进⼊1⽬录cd 1//删除当前⽬录下的1.txt⽂件rm 1.txt//回到上⼀级⽬cd ..//删除名为1的⽬录rmdir 1//查看删除操作是否删除成功ls//查看⽂件权限信息la -al//修改2.txt的⽂件权限为最⾼chomd 777 2.txt//查看刚刚修改的⽂件权限信息是否成功la -al//查看2.txt⽂件的md5md5 2.txt//查看挂载设备信息mount//将system分区变成可读可写"mount -o [option] devices directory"mount -o remount,rw /dev/block/sda6 /system//查看刚刚的修改是否成功mount//查看分区列表df//卸载掉"/storage/sdcard"分区挂载umount /storage/sdcard//查看刚刚的卸载是否成功df//输⼊点内容到2.txt中echo 333 >>2.txtecho 222 >>2.txt//查看2.txt⽂件cat 2.txt//指出两个⽂件是否存在差异cmp 2.txt 3.txt//复制2.txt⽂件夹并粘贴到当前⽬录中,命名为22.txtdd if=2.txt of=22.txt//指出两个⽂件是否存在差异cmp 2.txt 3.txtcd//在2⽬录下创建⼀个名为2o.txt的2的硬连接⽂件(因为2的⽬录下已经存在2.txt⽂件,不然使⽤"ln 2.txt 2"命令就可以了)ln 2.txt 2/2o.txt//进⼊到2⽬录cd 2//查看2o.txt⽂件内容cat 2o.txt//在2o.txt⽂件中加⼊内容echo >>2o.txt//返回上⼀级⽬录cd ..//查看连接⽂件2.txt的⽂件内容是否与2o.txt⼀致cat 2.txt⼆、信息查询相关命令1.log 相关命令⼦命令参数说明dumpstate-系统状态信息(需要root权限)包括⼿机当前的内存信息、CPU信息、logcat缓存,kenel缓存等等adb bugreport包含这个信息bugreport-⾥⾯含有dmesg,dumpstate和dumpsysy demsg-kenel的loglogcat参数较多打印⽇志缓冲区⽇志dumpsys meminfo [processName]activity [processName]获取系统各项服务信息2.获取系统信息相关命令⼦命令参数说明getevent-获取按键信息getprop-获取系统属性setprop-设置系统属性(需要root权限)pm-安装包管理,查询安装包的各种信息ps-查看进程信息top -m num 最⼤显⽰条数-n num 更新次数-d num 两者更新时间-s col按哪列排序(cpu,vss,rss,thr)-t显⽰线程信息⽽不是进程-h显⽰帮助⽂档获取CPU使⽤情况procrank-查询各进⾏内存消耗情况(需要root权限)wm size获取屏幕分辨率3.命令使⽤实例//输出系统状态信息⾄F:\test\dumpstate.txt,由于需要root权限,所以没root的过的⼿机输出为空adb shell dumptate >F:\test\dumpstate.txt//输出过去系统的状态,log,⼀般操作过程中未抓取log的时候⼀旦出现问题就使⽤这个命令来查看adb shell bugreport >F:\test\bugreport.txt//输出内核信息adb shell dmesg//输出当前缓冲区⽇志并保存adb shell logcat >F:\test\bugreport.txt//输出内存信息adb shell dumpsys meminfo//输出当前CPU使⽤情况信息adb shell dumpsys cpuinfo//输出当前activity使⽤情况信息adb shell dumpsys activity//相当于过滤,只找名为"mF"的activity使⽤情况信息adb shell dumpsys activity | find "mF"//获取按键信息,在⼿机没有按键信息的情况下会先提⽰你每个设备的ID代表的设备信息,按键过程中会实时刷新adb shell getevent//获取系统属性adb shell getprop//查看pm帮助信息adb shell pm//查看⼿机内的安装包列表adb shell pm list packages//查看当前⼿机进程信息adb shell ps//获取cpu使⽤情况,只查看⼀次,不实时刷新adb shell top -n 1//获取前⼗的cpu使⽤情况,只查看⼀次,不实时刷新adb shell top -n 1 -m 10//查询各进⾏内存消耗情况adb shell procrank//详细查询某个包的内存使⽤情况adb shell dumpsys meminfo packageName三、操作⼿机相关命令1.相关命令⼦命令参数说明bmgr [backup | restore | list | transport | run]bmgr backup PACKAGEbmgr restore......数据备份与还原kill kill [-s signame | -signu | -signame]{job | pid | pgrp}...kill -l [exit_status...]结束进程reboot⽆重启⼿机svc power 控制电源管理data 控制数据连接控制wifi管理控制USB状态控制电源、⽹络、USBwipe wipe system | data | all擦除分区,恢复出⼚设置am am [subcommand] [options]am start......antivyty管理器⽤于开启应⽤,⼴播,服务等功能2.命令使⽤实例//查询已安装包名列表adb shell pm list package//对com.tencent.mm包使⽤monkey命令adb shell monkey -p com.tencent.mm --throttle 200 50000 //查找monkey进程信息adb shell ps | find "monkey"//杀掉monkey进程,例⼦中的数字是monkey的PID进程号adb shell kill 23770//重启⼿机adb shell reboot//打开svc帮助界⾯adb shell svc//查询wifi操作帮助adb shell svc wifi//关闭wifiadb shell svc wifi disable//打开wifiadb shell svc wifi enable//擦除data,即恢复出⼚设置adb shell wipe data//指定查询"mF"的activity信息adb shell dumpsys activity | find "mF"//启动指定activityadb shell am start -n com.android.browser/.BrowserActivyty//查看am命令的帮助信息adb shell am四、测试⽤途相关命令1.测试信息相关命令⼦命令参数说明iftop iftop [-r repeats] [-d delay]列出⽹络传输包情况Monkey Monkey [options] count执⾏Monkey命令netstat-显⽰各种⽹络相关信息ping ping [option] ipv4因特⽹包探测器,⽤于测试⽹络连接量的程序ping6ping6 [option] ipv6因特⽹包探测器,⽤于测试⽹络连接量的程序screenrecord screenrecord [options] < filename >屏幕录像(只⽀持android4.4以上的设备)screencap [-hp] [-d display-id] [FILENAME]-p ⽂件保存路径屏幕截图uiautomator uiautomator [options]执⾏uiautomator脚本命令使⽤实例://进⼊交互模式adb shell//列出⽹络传输包情况iftop//显⽰各种⽹络相关信息netstat//实时查看⽹络连接量ping //实时查看⽹络连接量ping6 //屏幕录像,保存路径为/mnt/sdcard/1.mp4,需要注意的是屏幕录像只⽀持android4.4以上的设备使⽤ctrl+c停⽌录像screenrecord /mnt/sdcard/1.mp4//将sd卡路径下的1.mp4导出到F盘(先退出交互模式)adb pull /mnt/sdcard/1.mp4 f:\//截图screencap /mnt/sdcard/1.png2.输⼊信息命令1)input作⽤:模拟硬件设备的输⼊格式:input [] [...]参数:test(Defalt;touchscreen)keyevent [--longpress] ...(Default:keyboard)tap (Default:touchscreen)swipe [duration(ms)] (Default:touchscreen)press (Default:trackball)roll (Default:trackball)2)命令使⽤实例//进⼊交互模式adb shell//输⼊⽂本123456input text 123456//使⽤keycode num输⼊,keycode表可百度查询input keyevent 7//使⽤keycode name输⼊1input keyevent KEYCODE_1//使⽤keycode name按空格键input keyevent KEYCODE_HOME//点击坐标367 1277input tap 367 1277//从(1024,945)滑动到(134,968)200毫秒内input swipe 1024 945 134 968 200到此这篇关于详解adb shell 常⽤命令的⽂章就介绍到这了,更多相关adb shell命令内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
shell脚本中的4种循环语句使用
shell脚本中的4种循环语句使⽤1、for循环#语法结构#第⼀种:取值变量for变量名in变量取值表do指令done#例⼦:#⽰例for a in {1..9}domkdir dir$adone#第⼆种:C语⾔型for循环for ((exp1; exp2; exp3))do指令done#例⼦:#⽰例for ((i=1;i<=3;i++))doecho $idone#解释:i从1开始,当i<=3就可以运⾏,如果运⾏的值⼤于3,就退出循环#语法结构讲解for关键字后的双括号是三个表达式,第⼀个是变量初始化(例如:i=1),第⼆个为变量的范围(例如i<=3),第三个为变量⾃增或⾃减(例如i++)。
当第⼀个表达式的初始化值符合第⼆个变量的范围时,就进⾏如循环执⾏,当条件不满⾜时就退出循环#简单⽰例#1.竖向打印10 9 8 7 6 5⼏个数字#第⼀种⽅法:直接列出元素[root@game scripts]# cat for1.sh#!/bin/bashfor i in12345doecho $idone#效果[root@game scripts]# sh for1.sh12345第⼆种⽅法:使⽤⼤括号{}⽣成数字序列[root@game scripts]# cat for2.sh#!/bin/bashfor i in {1..5}doecho $idone#效果[root@game scripts]# sh for2.sh12345#第三种⽅法:使⽤seq⽣成数字序列[root@game scripts]# cat for3.sh#!/bin/bashfor i in `seq 15`doecho $idone#效果[root@game scripts]# sh for3.sh12345#2.获取当前⽬录下的⽬录或⽂件名,并将其作为变量列表打印输出#数据[root@game ~]# mkdir -p /test/{test1.txt,test2.txt,guo.txt,ke.txt}[root@game ~]# ls -l /test/total 0drwxr-xr-x. 2 root root 6 Aug 2122:14 guo.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 ke.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 test1.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 test2.txt#编写脚本[root@game scripts]# cat for4.sh#!/bin/bashusage(){echo "directory not found"}[ ! -d /test ] && usage && exit 1cd /testfor i in `ls`doecho $idone#效果[root@game scripts]# sh for4.shguo.txtke.txttest1.txttest2.txt2、while循环#while循环⼀般应⽤于守护进程程序或⼀直循环执⾏#语法格式while <条件表达式>do指令done#简单⽰例每隔2秒在屏幕上输出⼀次负载值[root@game scripts]# cat while1.shwhile truedouptimesleep 2 #暂停2秒再执⾏done#提⽰:while true表⽰条件永远为真,因此会⼀直运⾏,像死循环⼀样,称为守护进程#效果:每隔2秒就输出⼀次[root@game scripts]# sh while1.sh23:11:35 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.0523:11:37 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.0523:11:39 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.053、until循环#until循环是当条件表达式不成⽴时,就会进⼊循环,当条件表达式成⽴时,就会终⽌循环#语法格式until <条件表达式>do指令done#⽰例#如果⽤户输出的是guoke就符合条件,退出循环,如果不是,⽤户输⼊3次之后就退出循环[root@game scripts]# cat until1.sh#!/bin/bashi=1until [ "$user" = "guoke" -o "$i" -gt 3 ]doread -p "please enter you username:" userlet i++done#效果[root@game scripts]# sh until1.shplease enter you username:guoke[root@game scripts]# sh until1.shplease enter you username:1please enter you username:1please enter you username:1[root@game scripts]#4、select循环#语法格式select变量名in [菜单取值列表]do指令done#⽰例#第⼀种:直接使⽤列表字符串[root@game scripts]# cat select1.sh#!/bin/bashselect name in apache httpd nginx tomcatdoecho $namedone#效果[root@game scripts]# sh select1.sh1) apache2) httpd3) nginx4) tomcat#? 1#? 3nginx#? 4tomcat#? ^C#第⼆种:采⽤数组做变量列表[root@game scripts]# cat select2.sh#!/bin/basharray=(apache nginx tomcat lighttpd)select name in"${array[@]}"doecho $namedone#效果[root@game scripts]# sh select2.sh1) apache2) nginx3) tomcat4) lighttpd#? 3tomcat#? 4lighttpd#? ^C5.循环控制及状态返回值break (循环控制)continue (循环控制)exit (退出脚本)return (退出函数)#区别break continue在条件语句及循环语句(for if while等)中⽤于控制程序的⾛向exit是终⽌所有语句并退出脚本return:仅⽤于在函数内部返回函数执⾏的状态值#break⽰例#如果i等于3,那么就终⽌循环[root@game scripts]# cat break1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thenbreakelseecho $ifidoneecho "1111"yum install net-tools -y > /dev/null[ $? -eq 0 ] && echo "already install"#效果[root@game scripts]# sh break1.sh121111already install#说明:i等于3的时候就终⽌循环,但是没有跳出脚本#exit⽰例[root@game scripts]# cat exit1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thenexit 1fiecho $idoneecho "ok"#执⾏效果[root@game scripts]# sh exit1.sh12#说明:当i等于3的时候就会退出脚本了,就不会执⾏后⾯的语句#continue⽰例[root@game scripts]# cat con1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thencontinueelseecho $ifidoneecho "ok"#执⾏效果[root@game scripts]# sh con1.sh。
使用Shell脚本进行数据处理和转换的技巧
使用Shell脚本进行数据处理和转换的技巧Shell脚本是一种强大的工具,可以用于数据处理和转换。
通过编写脚本,可以自动化重复性的任务,提高工作效率。
本文将介绍一些使用Shell脚本进行数据处理和转换的技巧。
一、数据读取和处理Shell脚本可以使用各种命令来读取和处理数据。
以下是几个常用的命令:1. cat命令:用于将文件的内容输出到屏幕上。
可以用于查看文件的内容或将多个文件合并为一个文件。
2. grep命令:用于在文件中搜索指定的模式。
可以使用正则表达式来更灵活地匹配模式。
3. awk命令:用于处理文本文件中的列。
可以按照指定的分隔符对文本进行切割,并对切割后的列进行操作。
4. sed命令:用于对文本进行替换操作。
可以使用正则表达式来匹配要替换的内容,并指定替换的内容。
二、数据转换和格式化Shell脚本可以对数据进行转换和格式化,以满足不同的需求。
以下是几种常见的转换和格式化操作:1. 文件格式转换:可以使用命令行工具如iconv来进行文件编码格式的转换,以便在不同操作系统或软件中使用。
2. 数据排序:使用sort命令可以对数据进行排序操作。
可以指定排序的字段和排序的顺序,以满足不同的需求。
3. 数据统计:使用命令行工具如wc可以对数据进行统计操作。
可以统计文件的行数、字数和字符数等。
4. 数据格式化:使用printf命令可以对数据进行格式化输出。
可以指定输出的宽度、小数位数和对齐方式等。
三、循环和条件判断Shell脚本可以使用循环和条件判断来处理多个数据和根据条件执行不同的操作。
以下是几个常用的循环和条件判断语句:1. for循环:用于遍历一组数据,并对每个数据执行相同的操作。
可以使用in结构指定要遍历的数据列表。
2. while循环:用于在满足条件的情况下重复执行一组操作。
可以使用条件表达式来控制循环的执行。
3. if语句:用于根据条件执行不同的操作。
可以使用条件表达式来判断条件是否成立,然后执行相应的操作。
shell编程题经典100例
shell编程题经典100例 1. 显示当前路径```shellpwd```2. 列出当前目录中的文件和目录```shellls```3. 创建一个新的目录```shellmkdir <目录名> ```4. 删除一个目录 ```shellrmdir <目录名> ```5. 删除一个文件 ```shellrm <文件名>```6. 复制一个文件```shellcp <源文件> <目标文件> ```7. 移动一个文件```shellmv <源文件> <目标文件> ```8. 重命名一个文件```shellmv <旧文件名> <新文件名> ```9. 创建一个符号链接```shellln -s <源文件> <符号链接> ```10. 显示一个文件的详细信息 ```shellls -l <文件名>```11. 显示一个目录的详细信息 ```shellls -ld <目录名>```12. 查找一个文件```shellfind <路径> -name <文件名> ```13. 搜索文本字符串```shellgrep <字符串> <文件>```14. 显示一个文件的指定行```shellhead -n <行数> <文件>```15. 显示一个文件的最后几行 ```shelltail -n <行数> <文件>```16. 比较两个文件```shelldiff <文件1> <文件2>```17. 合并两个文件```shellcat <文件1> <文件2> > <输出文件> ```18. 运行一个命令```shellcommand <参数>```19. 管道命令```shellcommand1 | command2```20. 重定向输出```shellcommand > <输出文件> ```21. 重定向输入```shellcommand < <输入文件> ```22. 使用环境变量```shellecho $PATH```23. 设置环境变量```shellPATH=/usr/bin:/bin export PATH```24. 创建一个脚本```shell#!/bin/bash# 脚本内容```25. 运行一个脚本 ```shell./<脚本名>```26. 调试一个脚本 ```shellbash -x <脚本名> ```27. 使用case语句 ```shellcase $1 in"start")# 执行启动命令;;"stop")# 执行停止命令;;esac```28. 使用if语句```shellif [ $1 -gt 10 ]; then# 执行条件为真的命令 else# 执行条件为假的命令 fi```29. 使用for循环```shellfor i in 1 2 3 4 5; do # 迭代执行命令done```30. 使用while循环```shellwhile [ $i -lt 10 ]; do # 循环执行命令i=$((i+1))done```31. 使用until循环```shelluntil [ $i -gt 10 ]; do # 循环执行命令i=$((i+1))done```32. 使用函数```shellfunction my_function() { # 函数体}my_function```33. 使用数组```shellarr=(1 2 3 4 5)echo ${arr[2]}```34. 使用字典```shelldeclare -A dictdict["name"]="John Doe" echo ${dict["name"]}```35. 使用正则表达式```shellif [[ $string =~ ^[[:alpha:]]+$ ]]; then # 匹配以字母开头的字符串fi```36. 使用管道符```shellls | grep "txt"```37. 使用换行符```shellecho -e "Line 1\nLine 2"```38. 使用引号```shellecho "This is a string with spaces"```39. 使用转义字符```shellecho "This is a string with a \n newline" ```40. 使用注释```shell# 这是一行注释```41. 使用条件?:```shellresult=$(if [ $condition ]; then echo "true"; else echo "false"; fi)```42. 使用切片```shellecho "${string:0:3}"```43. 使用join命令```shellecho $( IFS=","; echo "${array[]}" ) ```44. 使用read命令```shellread -p "Enter your name: " name```45. 使用变量赋值```shellvar=$(expr 1 + 2)```46. 使用算术运算```shell(( i++ ))```47. 使用逻辑运算符```shellif [[ $condition1 && $condition2 ]]; then # 条件 1 和条件 2 都为真fi48. 使用比较运算符```shellif [[ $var -gt 10 ]]; then # var 大于 10fi```49. 使用测试命令```shellif test -f <文件>; then# 文件存在```50. 使用getopts解析命令行参数 ```shellwhile getopts ":ab:" opt; do case $opt ina)flag_a=true;;b)arg_b=$OPTARG;; esac done```。
shell脚本教程详细讲解(很好)ppt课件
` ‘
用于括起来shell命令 用于原样显示
25
6. 反斜线 反斜线是转义字符,它能把特殊字符变成普通字 符。在某个字符前面利用反斜杠(\)能够阻止shell 把后面的字符解释为特殊字符。 例4 : [yuqun@yuqun ~]$echo “Filename is N0\$\*” Filename is N0$* 注意:在单引号括起来的字符串中,反斜线也成 为普通字符,而失去转义字符功能。
5
为什么选择VI
就使用的方便性而言,有比vi更好的编辑器,还要图 形化的edit,为什么还要用vi? 历史久远,功能强大,在有些情况下系统中能够找 到的编辑器只有vi; 用户一旦熟悉后,使用非常方便;系统管理员使用 正则表达式可以极大地提高工作效率,而学习vi也 是掌握正则表达式的有效途径。 由于vi的版本不同,其命令格式、功能和用法会有一
14
三种模式间的转换关系
按ESC键 文本输入状态 按 A,I,S,C,O 等命令 命令状态
按“:”键 行编辑状态 执行非退出命 令,如w
ቤተ መጻሕፍቲ ባይዱ15
案例练习
1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录; 2. 进入 vitest 这个目录当中; 3. 将 /etc/man.config 拷贝到本目录底下 4. 使用 vi 开启本目录下的 man.config 这个档案; 5. 在 vi 中设定一下行号; 6. 移动到第 58 行,向右移动 40 个字符,请问您看到的双引 号内是什么目录? 7. 移动到第一行,并且向下搜寻一下“bzip2”这个字符串,请 问他在第几行? 8. 接着下来,我要将 50 到 100 行之间的 man 改为 MAN,并 且一个一个挑选是否需要修改,如何下达指令? 9. 修改完之后,突然反悔了,要全部复原,有哪些方法? 10. 我要复制 51 到 60 行这十行的内容,并且贴到最后一行之 后; 11. 删除 11 到 30 行之间的 20 行; 12. 将这个文件另存成一个 man.test.config 的文件; 13. 到第 29 行,并且删除 15 个字符; 14. 储存后离开
使用shell的基本操作命令
使用shell的基本操作命令使用Shell的基本操作命令Shell是一种命令行解释器,它是连接用户与操作系统内核的桥梁,可以通过输入不同的命令来操作计算机系统。
本文将介绍一些常用的Shell基本操作命令,并对其功能进行详细说明。
1. cd命令cd(Change Directory)命令用于切换当前目录。
通过输入cd命令,后面跟随要切换到的目录路径,即可切换到指定目录。
例如,输入cd /home,即可切换到/home目录下。
2. ls命令ls(List)命令用于列出当前目录下的文件和子目录。
通过输入ls命令,即可显示当前目录下的所有文件和子目录的名称。
例如,输入ls,即可显示当前目录下的所有内容。
3. pwd命令pwd(Print Working Directory)命令用于显示当前所在的目录路径。
通过输入pwd命令,即可显示当前所在的目录路径。
例如,输入pwd,即可显示当前目录的路径。
4. mkdir命令mkdir(Make Directory)命令用于创建新的目录。
通过输入mkdir命令,后面跟随要创建的目录名称,即可在当前目录下创建新的目录。
例如,输入mkdir test,即可在当前目录下创建名为test的目录。
5. touch命令touch命令用于创建新的空文件。
通过输入touch命令,后面跟随要创建的文件名称,即可在当前目录下创建新的空文件。
例如,输入touch test.txt,即可在当前目录下创建名为test.txt的空文件。
6. cp命令cp(Copy)命令用于复制文件或目录。
通过输入cp命令,后面跟随要复制的文件或目录路径,以及目标路径,即可将文件或目录复制到指定位置。
例如,输入cp file.txt /home,即可将当前目录下的file.txt文件复制到/home目录下。
7. mv命令mv(Move)命令用于移动文件或目录,也可以用于文件或目录的重命名。
通过输入mv命令,后面跟随要移动或重命名的文件或目录路径,以及目标路径或新的名称,即可将文件或目录移动到指定位置或重命名。
Shell脚本中的set指令,比如set-x和set-e
Shell脚本中的set指令,⽐如set-x和set-eset参数介绍set指令能设置所使⽤shell的执⾏⽅式,可依照不同的需求来做设置 -a 标⽰已修改的变量,以供输出⾄环境变量。
-b 使被中⽌的后台程序⽴刻回报执⾏状态。
-C 转向所产⽣的⽂件⽆法覆盖已存在的⽂件。
-d Shell预设会⽤杂凑表记忆使⽤过的指令,以加速指令的执⾏。
使⽤-d参数可取消。
-e 若指令传回值不等于0,则⽴即退出shell。
-f 取消使⽤通配符。
-h ⾃动记录函数的所在位置。
-H Shell 可利⽤"!"加<指令编号>的⽅式来执⾏history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使⽤监视模式。
-n 只读取指令,⽽不实际执⾏。
-p 启动优先顺序模式。
-P 启动-P参数后,执⾏指令时,会以实际的⽂件或⽬录来取代符号连接。
-t 执⾏完随后的指令,即退出shell。
-u 当执⾏时使⽤到未定义过的变量,则显⽰错误信息。
-v 显⽰shell所读取的输⼊值。
-x 执⾏指令后,会先显⽰该指令及所下的参数。
+<参数> 取消某个set曾启动的参数。
set -x介绍⽤于脚本调试,在liunx脚本中可⽤set -x就可有详细的⽇志输出.免的⽼是要echo了set -e介绍#!/bin/bashset -ecommand 1command 2...exit 0你写的每个脚本都应该在⽂件开头加上set -e,这句语句告诉bash如果任何语句的执⾏结果不是true则应该退出。
这样的好处是防⽌错误像滚雪球般变⼤导致⼀个致命的错误,⽽这些错误本应该在之前就被处理掉。
如果要增加可读性,可以使⽤set -o errexit,它的作⽤与set -e相同。
使⽤-e帮助你检查错误。
如果你忘记检查(执⾏语句的结果),bash会帮你执⾏。
在macOS终端中执行批量任务的脚本命令
在macOS终端中执行批量任务的脚本命令在日常的工作中,我们经常需要执行一些重复性的任务,而这些任务可能需要在终端中一个一个地输入指令,非常繁琐。
为了提高工作效率,我们可以使用脚本命令来批量执行这些任务。
在macOS终端中,我们可以使用Shell脚本来进行批量任务的执行。
Shell是一种命令行解释器,常见的有Bash、Zsh等。
下面,我将介绍一些常用的Shell脚本命令来实现批量任务的执行。
1. 批量创建文件夹有时候,我们需要在某个目录下批量创建多个文件夹。
使用Shell脚本可以轻松实现这一功能。
打开终端,输入以下命令:```shell#!/bin/bashfor i in {1..10}domkdir "folder$i"done```在终端中执行上述命令后,就会在当前目录下创建10个文件夹,其名称分别为"folder1"、"folder2"、"folder3"等等。
2. 批量重命名文件有时候,我们需要对某个目录下的多个文件进行批量重命名。
使用Shell脚本可以很方便地实现这一功能。
打开终端,输入以下命令:```shell#!/bin/bashfor file in *domv "$file" "new_$file"done```在终端中执行上述命令后,目录下的所有文件将会被重命名为"new_文件名"的格式。
3. 批量执行命令有时候,我们需要在终端中执行多个命令,而且这些命令需要按照一定的顺序进行执行。
使用Shell脚本可以很容易地实现这一功能。
打开终端,输入以下命令:```shell#!/bin/bashecho "执行命令1"command1echo "执行命令2"command2echo "执行命令3"command3```在终端中执行上述命令后,命令1、命令2和命令3将会按照给定的顺序被执行。
如何在Shell脚本中读取并处理文件
如何在Shell脚本中读取并处理文件Shell脚本是Unix或Linux操作系统中常用的一种脚本语言,可以用于自动化地执行一系列的操作。
在Shell脚本中,读取和处理文件是一个常见的需求,可以通过一些内置的命令和技巧来实现。
本文将介绍如何在Shell脚本中读取并处理文件。
一、读取文件内容在Shell脚本中,常用的读取文件内容的命令有以下几个:1. cat命令:用于将文件内容输出到标准输出。
可以使用cat命令读取文件的全部内容或者指定行数的内容。
示例:```shellcat filename # 读取文件的全部内容cat -n filename # 读取文件的全部内容,并输出行号cat filename | while read line; do echo $line; done # 按行读取文件内容,并逐行处理```2. head和tail命令:分别用于查看文件的开头和结尾内容。
可以使用head和tail命令读取文件的指定行数的内容。
示例:```shellhead -n 10 filename # 读取文件的前10行内容tail -n 10 filename # 读取文件的后10行内容```3. sed命令:用于对文件内容进行文本替换和编辑操作。
可以使用sed命令读取文件的指定行数的内容并进行处理。
示例:```shellsed -n '1,10p' filename # 读取文件的第1行到第10行内容sed -n '/pattern/p' filename # 读取文件中包含指定模式的行内容```二、处理文件内容读取文件内容后,我们可以对文件内容进行处理和操作,常用的处理方式有以下几种:1. 循环处理:使用while循环和read命令按行读取文件内容,并进行处理。
示例:```shellcat filename | while read line; do# 处理每行内容echo $linedone```2. 提取关键信息:使用grep命令筛选文件中包含特定字符串或模式的行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用shell脚本命令1、显示包含文字aaa的下一行的内容:sed -n '/aaa/{n;p;}' filename2、删除当前行与下一行的内容:sed -i '/aaa/{N;d;}' filename3、删除当前行与下两行的内容:sed -i '/aaa/{N;N;d;}' filename依次类推,删除三行,则为{N;N;N;d;},分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数:awk ' { print NF } '如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f则执行 echo $VALUE | awk ' { print NF } ' 后的结果为65、在linux中建立一个文件与另一文件的链接,即符号链接ln -s /var/named/chroot/etc/named.conf named.conf这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。
即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->/var/named/chroot/etc/named.conf注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。
所以需对实际文件进行删除操作。
6、显示指定字符范围内的内容:如:显示文件test.txt中字符#test begin与#test end之间所有的字符sed -n "/#test begin/,/#test end/p" test.txt或 awk "/#test begin/,/#test end/" test.txt在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。
请看如下例子:[root@linux ~]# name=HaHa[root@linux ~]# echo $nameHaHa[root@linux ~]# myname="$name is wow"[root@linux ~]# echo $mynameHaHa is wow[root@linux ~]# myname='$name is wow'[root@linux ~]# echo $myname$name is wow从上面例子可以看出,使用了单引号的时候,那么$name只是普通字符,直接输出而已!2. 逐行读取文件∙使用for循环来读取文件for line in `cat file.txt`doecho $linedone注意:由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,如果行里有空格的时候,输出的结果会很乱,所以只适用于行连续不能有空格或者换行符的文件∙使用while循环读取文件cat file.txt |while read linedoecho $linedone或者:while read linedoecho $linedone < file.txt注意:由于使用while来读入文件里的行时,会整行读入,不会关注行的内容(空格..),所以比for读文件有更好的适用性,推荐使用while循环读取文件3. bash shell 脚本中常用隐含变量中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)$$ 变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。
$* 和 $@ 如果输出是一样的,但是在使用for循环,在使用双引号("")引用时"$*" 会输出成一个元素而 "$@" 会按照每个参数是一个元素方式输出请看测试例子#cat test.sh#!/bin/shecho '"$@" output.....'for i in "$@"doecho $idoneecho '"$*" output ....'for i in "$*"doecho $idone输出结果#sh test.sh a b c d"$@" output.....abcd"$*" output ....a b c d从输出结果可以看出 "$*" 输出是一行而 "$@" 输出则是四行4. 变量内容的删除与替换我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下表列出的方法[root@linux ~]# exporttest_str="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin: /usr/bin:/root/bin"[root@linux ~]# echo ${test_str#/*kerberos/bin:}/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin5. 变量条件测试赋值在某些时刻我们需要‘判断’某个变量是否存在,若变量存在则将此变量值赋值给新的变量,若变量不存在则将其他值赋值给新的变量.[root@linux ~]# test_name=""[root@linux ~]# test_name=${test_name-root}[root@linux ~]# echo $test_name<== 因为 test_name 被设定为空字符窜!所以当然还是保留为空字符窜![root@linux ~]# test_name=${test_name:-root}[root@linux ~]# echo $test_nameroot <== 加上‘:’后若变量内容为空或者是未设定,都能够以后面的内容替换!基本上这种变量的测试也能够透过 shell script 内的 if...then... 来处理,不过通过上述提及的简单的方法来测试变量,是程序看起来更精简一些!6. shell 中分隔符 : 变量IFS 使用shell脚本中,如果使用for循环一个字符窜的话,默认使用空格来分割字符窜.还有前面所提到的使用for循环逐行读取文件内容时候,文件行中如果有空格的话输出的结果也会变乱.这个时候使用 IFS 变量来设置特定的字符窜分割符来,达到输出正确的目的.默认情况下 IFS 是使用<space><tab><newline>,空格 \t \n 来作为默认的分割符的.我们将前面使用for逐行读取文件的例子改进下就可以输出正确了,请看下面#!/bin/bashIFS_old=$IFS #将原IFS值保存,以便用完后恢复IFS=$’\n’ #更改IFS值为$’\n’for line in `cat file.txt`doecho $linedonefile.txt 文件内容如下[root@linux]$ cat file.txtsdfsdfsdfsdfssssss ssssss ssssss ssssssdfsdfsdfsdfsdf执行测试程序输出结果如下(正确输出)[root@linux]$ sh test.shsdfsdfsdfsdfssssss ssssss ssssss ssssssdfsdfsdfsdfsdf如果未设置IFS变量,使用默认的IFS变量值 ,输出结果如下[root@linux]$ sh test.shsdfsdfsdfsdfssssssssssssssssssssssssdfsdfsdfsdfsdf从以上测试程序输出结果,可以根据自己的需求来设定 IFS变量,在举一个例子如下:while IFS=: read userName passWord userID groupID geCos homeDir userShelldoecho "$userName -> $homeDir"done < /etc/passwd7. shell 数组的使用数组赋值方式:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1arrya[1]=var2...array[n]=varN计算数组元素个数或者长度:(1) ${#array[@]}(2) ${#array[*]}了解了数组基础语法,举例说明,请看:#!/bin/bashNAMESERVERS=("." "." ".") # 得到数组长度tLen=${#NAMESERVERS[@]}# 循环数组for (( i=0; i<${tLen}; i++ ));doecho ${NAMESERVERS[$i]}done在看一个复杂一点的例子,将文件内容读取到数组中:#!/bin/bash# 设置IFS将分割符设置为换行符(\n)OLDIFS=$IFSIFS=$'\n'# 读取文件内容到数组fileArray=($(cat file.txt))# restore itIFS=$OLDIFStLen=${#fileArray[@]}# 循环显示文件内容for (( i=0; i<${tLen}; i++ ));doecho "${fileArray[$i]}"done8. 逻辑判断条件测试∙文件属性的判断#!/bin/bashecho "checks the existence of the messages file."echo -n "Checking..."if [ -f /var/log/messages ];thenecho "/var/log/messages exists."fiechoecho "...done."∙字符串比较if [ "$(whoami)" != 'root' ]; thenecho "You have no permission to run $0 as non-root user." exit 1;fi数值比较(整数)num=`wc -l work.txt`if [ $num -gt 150 ];thenecho "you've worked hard enough for today."echofi如果要查看详细的测试操作,可以查看man手册 man test如何用脚本实现分割文件CODE:[Copy to clipboard]如何查找日期为某一天的文件CODE:[Copy to clipboard]如何计算当前目录下的文件数和目录数CODE:[Copy to clipboard]如何只列子目录?CODE:[Copy to clipboard]如何实现取出文件中特定的行内容CODE:[Copy to clipboard]如何查找含特定字符串的文件CODE:[Copy to clipboard]如何列出目录树CODE:[Copy to clipboard]如何实现取出文件中特定的列内容CODE:[Copy to clipboard]在vim中实现批量加密CODE:[Copy to clipboard]$@等特定shell变量的含义CODE:[Copy to clipboard]如何使程序的执行结果同时定向到屏幕和文件CODE:[Copy to clipboard]如何用sendmail给系统所有用户送信CODE:[Copy to clipboard]如何查找某条命令的相关库文件CODE:[Copy to clipboard]如何使用host命令获得更多信息CODE:[Copy to clipboard]如何停止终端多个进程CODE:[Copy to clipboard]如何转存用户bash_history文件2009年04月28日Program, Shellshell技巧脚本shell常用技巧用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少. 1,建立自己的函数库mkdir functionlib然后将常用的脚本改成函数的语法,如:function filename { command ; }将filename拷贝到functionlib中,2,修改环境文件,在/etc/profile中添加export FPATH=$HOME/functionlib3,重登录一下这样的话,你就可以随时用像ls那样运行你自己的filename”命令”而不需要用什么dot,sh,来运行你的函数/脚本啦~~如果在脚本中运行,可以在脚本顶部用#!/bin/sh##autoload filename //来自动导入函数.…filename //调用函数…用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少. 1,建立自己的函数库mkdir functionlib然后将常用的脚本改成函数的语法,如:function filename { command ; }将filename拷贝到functionlib中,2,修改环境文件,在/etc/profile中添加export FPATH=$HOME/functionlib3,重登录一下这样的话,你就可以随时用像ls那样运行你自己的filename”命令”而不需要用什么dot,sh,来运行你的函数/脚本啦~~如果在脚本中运行,可以在脚本顶部用#!/bin/sh##autoload filename //来自动导入函数.…filename //调用函数…技巧:pkill的妙用——————————————————————————–有的时候有很多进程或运行或睡眠或僵死,占用了很多宝贵的内存空间,kill固然可以杀掉某些进程,但更好的方法是用pkill,举例:代码:root//root>ps -APID TTY TIME CMD…1045 ? 00:00:00 kdeinit1052 ? 00:00:00 kdeinit1054 pts/0 00:00:00 xterm1056 pts/1 00:00:00 bash1082 pts/0 00:00:00 psroot//root>freetotal used free shared buffers cachedMem: 252340 212036 40304 0 5752 103200-/+ buffers/cache: 103084 149256Swap: 610460 0 610460root//root>pkill -9 xterm;free[1]+ Killed xtermtotal used free shared buffers cachedMem: 252340 210776 41564 0 5760 103200-/+ buffers/cache: 101816 150524Swap: 610460 0 610460在我杀掉了xterm这个进程后,看看你的free内存空间相应增加不少?.详细使用方法请:man pkill or pkill –help用stty和dd实现暂停,只须按一个键就可.#!/bin/ksh#function char {settty=$(stty -g)stty rawdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty $settty}print “Press any key to continue…”input=$(char)技巧:如何检查用户的输入? ——————————————————————————–有的时候,我们对用户的输入要作必要的检测,如,限制输入的长度/类型.举例说明:代码:#!/bin/ksh#要求用户必须输入四个数字while truedoecho -n “请输入四个数字:”read numlen=${#num}#变量len存放输入的长度if [[ $num != [0-9][0-9][0-9][0-9] || $len != 4 ]] then#进行检测,如果你输入有非数字字符,或者长度不等于四个,便提示错误信息echo “错误! 重新输入”continueelseecho “输入正确,退出!”;exit 0fidone这是个例子,在我们编写脚本中可以借鉴shell变量传递给sed,awk,grep简单方法——————————————————————————–有时候在脚本编写中,需要往诸如awk等工具中传递shell的变量,举个简单的例子,如: ps -aux|sed -n 1pread input?”please field number your want to see:”ps -aux|awk ‘{print $”‘${input}’”}’read enter?”please line number your want to see:”ps -aux|sed -n ${enter}pread user?”please username your want to see:”ps -aux|grep $user注:上述文件无实际意义,只为说明而已.开启小键盘数字灯的方法——————————————————————————–在man setleds的描述中,有一段设置字符控制台数字灯的脚本:代码:INITTY=/dev/tty[1-8]for tty in $INITTYdosetleds -D +num < $ttydone把它放在/etc/rc.d/rc.local文件中即可!这样就可以像WIN一样一启动系统,它的小键盘的数字灯总是打开的!在字符模式下,也可以这样:setleds -D +num/+caps/+scroll技巧:把输入的密码变成*号的方法-------------------------------------------------------------------------------- 注:此贴转自:代码:#!/bin/shgetchar() {stty cbreak -echodd if=/dev/tty bs=1 count=1 2> /dev/nullstty -cbreak echo}printf “Please input your passwd: ”while : ; doret=`getchar`if [ -z $ret ]; thenechobreakfistr=”$str$ret”printf “*”doneecho “Your password is: $str”技巧:数值转换——————————————————————————–代码:#!/bin/bash#scriptname:conver#在BASH下简单实现十进制到二进制和十六进制的转换cat<技巧:统计文本中单词数量的方法——————————————————————————–有些单词在一篇文章中经常会出现很多次,怎么统计这个单词的个数呢?!如:文件kshfile,统计shell这个单词的个数,$cat kshfilekshThe “Korn” shell, written by David Korn of AT&T Bell Labs (now Lucent). Written as a major upgrade to “sh”, it is compatible with it, but has many more internal commands for the most frequently used functions. It also incorporates most of the same features from tcsh which enhance interactive use (command line history recall etc.). This shell is now available on most systems. It was slowto gain acceptance because earlier versions were encumbered by AT&T licensing. $cat kshfile|tr ” ” ” “|grep -wc shell2技巧:显示文本奇数偶数的方法——————————————————————————–[javalee//home/javalee/myshell]cat tmpaaaaaaddddddkasdkfkkdjhasdjfdfddfkjsdfklklsasdfjklkas#显示文件tmp的奇数行的内容:[javalee//home/javalee/myshell]sed -n ‘1,$p;n’ tmpaaaaaakasdkfkkdfddfasdfjklkas#显示文件tmp的偶数行的内容:[javalee//home/javalee/myshell]sed -n ‘1,$n;p’ tmpdddddddjhasdjfkjsdfklkls技巧:倒读文本——————————————————————————–例如文章:$cat -n tmp1 abcdefgh2 1232342343 sjdfk234231,行号倒序:$cat -n tmp|tac #tac和cat很有趣吧~~3 sjdfk234232 1232342341 abcdefgh2,每行倒读:$cat tmp|revhgfedcba43243232132432kfdjs3,全部倒过来:$cat -n tmp|rev|tac32432kfdjs 3432432321 2hgfedcba 14,用sed也可以解决要求对sed有足够的理解)$cat -n tmp|sed ‘/ /!G;s/(.)(.* )/&21/;//D;s/.//’hgfedcba 1432432321 232432kfdjs 3技巧:把汉字转换成十六进制和二进制的方法——————————————————————————–命令行下,利用perl的unpack函数,可以将汉字巧妙的变成十六进制和二进制,如: [javalee//home/javalee/myshell]perl -le ‘print unpack(“B*”,”中”);’ #把汉字”中”转换成二进制1101011011010000[javalee//home/javalee/myshell]perl -le ‘print unpack(“H*”,”国”);’ #把汉字”国”转换成十六进制b9fa技巧:妙用watch命令实时观察内存变化——————————————————————————–在linux中,有一个很有趣的命令–watch,他的作用很有趣!他作用是以全屏幕方式重复地执行指定的命令,用户可以通过他了解命令的运行情况.如,我们要观察内存动态的变化,那么就可以:watch free这样就可以动态的观察内存中各个指标在指定时间内的变化啦~~,如要观察虚拟内存的变化,也可以通过打开另外一个终端,而不耽误当前终端的操作!:xterm -e watch -n 1 vmstat &这样就会弹出一个xterm,显示有关虚拟内存的情况.详细解释,请:watch –helpman watch技巧:用 tr 过滤文件[转贴]——————————————————————————–了解文本实用程序Jacek Artymiak(jacek@)自由作家和顾问2003 年 7 月没有人曾说过 sed 很容易–它确实不容易!但通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。