常用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 userShell doecho "$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:如何列出目录树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 的许多最基本功能。
powershell常用命令
powershell常用命令近期因工作需要,经常使用powershell功能,总结以下常用命令,便于工作使用。
1.Get-Command :得到所有PowerShell命令,获取有关cmdlet 以及有关Windows PowerShell 命令的其他元素的基本信息。
包括Cmdlet、Alias、Function。
2.Get-Process :获取所有进程3.Get-Help :显示有关Windows PowerShell 命令和概念的信息4.Get-History :获取在当前会话中输入的命令的列表5.Get-Job :获取在当前会话中运行的Windows PowerShell 后台作业6.Get-FormatData :获取当前会话中的格式数据7.Get-Event :获取事件队列中的事件8.Get-Alias :获取当前会话的别名9.Get-Culture :获取操作系统中设置的当前区域性10. Get-Date :获取当前日期和时间11. Get-Host :获取表示当前主机程序的对象12.Get-Member :获取对象的属性和方法。
13.Get-Random :从集合中获取随机数或随机选择对象14.Get-UICulture :获取操作系统中当前用户界面(UI) 区域性设置15.Get-Unique :从排序列表返回唯一项目16.Get-Variable :获取当前控制台中的变量17.Get-EventLog :获取本地或远程计算机上的事件日志或事件日志列表中的事件18.Get-ChildItem :获取一个或多个指定位置中的项和子项19.Get-Content :获取指定位置的项的内容20.Get-ItemProperty :获取指定项的属性21.Get-Wmi :获取Windows Management Instrumentation (WMI) 类的实例或可用类的相关信息22.Get-Location :获取当前工作位置的相关信息(如:F:\Users\TaoMin )23.Get-PSDrive:获取当前会话中的Windows PowerShell 驱动器24.Get-Item:获取位于指定位置的项25.Get-Process :获取在本地计算机或远程计算机上运行的进程26.Get-Service :获取本地或远程计算机上的服务27.Get-Transaction :获取当前(活动)事务28.Get-ExecutionPolicy :获取当前会话中的执行策略二.Set类(set类命令一般都含有参数)1.Set-Alias :在当前Windows PowerShell 会话中为cmdlet 或其他命令元素创建或更改别名(替代名称)如:如:Set-Alias aaa Get-Command2.Set-PSDebug :打开和关闭脚本调试功能,设置跟踪级别并切换strict 模式3.Set-StrictMode :建立和强制执行表达式、脚本和脚本块中的编码规则4.Set-Date :将计算机上的系统时间更改为指定的时间5.Set-Variable :设置变量的值,如果该变量还不存在,则创建该变量6.Set-PSBreakpoint :在行、命令或者变量上设置断点7.Set-Location :将当前工作位置设置为指定的位置8.Set-Item :将项的值更改为命令中指定的值9.Set-Service :启动、停止和挂起服务并更改服务的属性10.Set-Content :在项中写入内容或用新内容替换其中的内容11.Set-ItemProperty :创建或更改某一项的属性值12.Set-WmiInstance :创建或更新现有Windows Management Instrumentation (WMI) 类的实例13.Set-ExecutionPolicy :更改Windows PowerShell 执行策略的用户首选项。
powershell常用命令总结
powershell常用命令总结PowerShell是一种功能强大的脚本语言和命令行工具,旨在帮助用户自动化管理和配置Windows操作系统。
作为一名系统管理员或开发人员,熟练掌握PowerShell的常用命令是非常重要的。
在本文中,我将向你介绍一些最常用的PowerShell命令,并为你提供详细的步骤和示例。
首先,我们来了解一下PowerShell的优势。
与其他命令行工具相比,PowerShell 具有以下几个重要特点:1. 管道(Piping):允许将一个命令的输出作为另一个命令的输入,实现更高效的数据处理和操作。
2. 通用性:PowerShell可以管理和配置不仅仅是Windows操作系统,还包括其他Microsoft产品和第三方应用程序。
3. 面向对象:PowerShell是基于.NET框架的,支持面向对象的编程和操作,提供了丰富的类库和API。
4. 可扩展性:通过编写脚本和自定义模块,你可以轻松扩展和定制PowerShell 的功能。
在接下来的内容中,我们将学习一些常用的PowerShell命令,并分析它们的应用场景和用法。
一、基本命令1. Get-Command:获取所有可用命令或查询特定命令的信息。
例如,你可以使用“Get-Command”来获取PowerShell中所有的命令列表。
powershellGet-Command2. Get-Help:获取命令的使用帮助和文档。
在PowerShell中,你可以通过“Get-Help”命令来获取任何命令的详细说明。
powershellGet-Help Get-Process3. Set-Location和Get-Location:用于切换和获取当前目录。
这些命令与常用的cd和pwd命令类似。
powershellSet-Location C:\Windows\System32Get-Location4. Clear-Host:清除控制台窗口的内容,使其保持清洁。
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脚本命令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. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。
shell编程总结
shell编程总结
Shell编程是一种基于命令行的脚本编程语言,常用于Linux和Unix系统中。
本文将对Shell编程进行总结,包括以下内容:
1. Shell的基础知识:介绍Shell的定义、历史、发展以及Shell 与Linux的关系。
2. Shell脚本的格式:讲解Shell脚本的格式,包括文件头、变量、注释、命令等。
3. Shell命令:介绍常用的Shell命令,如ls、cd、cp、mv、rm、mkdir、cat等。
4. Shell的流程控制:讲解Shell脚本的流程控制语句,包括if语句、for循环、while循环、case语句等。
5. Shell函数:介绍Shell函数的定义、调用和传参等。
6. Shell的文本处理:讲解Shell脚本中的文本处理命令,如grep、sed、awk等。
7. Shell的正则表达式:介绍正则表达式的定义、语法和常用操作符等。
8. Shell的调试和错误处理:讲解Shell脚本的调试方法和错误处理语句,如set -x、set -e等。
9. Shell脚本的实战:通过实际案例介绍如何使用Shell脚本进行系统管理、日志分析、数据处理等。
通过本文的总结,读者可全面了解Shell编程的基础知识和常用技巧,提高Shell编程的能力。
shell命令总结实验报告
shell命令总结实验报告shell 命令总结第⼀章实验思路1 运⾏环境VMware软件、CentOS 7、MobaXterm第⼆章实验⽬的1 掌握Linux的使⽤。
2 掌握shell常⽤命令。
3 掌握MobaXterm软件的使⽤第三章实验步骤Shell:多任务多⽤户系统3.1 终端物理终端:直接连接到的是键盘、⿏标 /dev/console虚拟终端:(/dev/tty)基于物理终端,以软件形式实现的登录⽅式,以ctrl+alt+Fn[1-6],centos 7模拟终端:(/dev/pts/)基于物理终端,以软件形式实现的登陆⽅式,通过ssh、telent远程登录的、(可以有很多个,⽆穷多个),在图形界⾯打开的命令⾏3.1.1 终端交互式接⼝GUI:图形界⾯,GNOME,KDE, XFCECLI: 命令⾏,shell3.2 shell 应⽤程序/bin/sh/bin/bash ⽐较常⽤shell,跟随⽤户启动的独⽴程序/usr/bin/sh/usr/bin/bash/bin/tcsh/bin/csh3.3 命令提⽰符#:管理员使⽤的命令提⽰符$: 普通⽤户使⽤的命令提⽰符3.4 命令3.4.1 shell 内嵌命令,执⾏效率⾼,常驻内存shell外部命令,根据需要执⾏which whereis 查找外部命令的位置3.4.2 帮助⽂档help,主要针对内嵌man(manual),主要针对外部命令3.4.3 主要命令1. echo $SHELL 查看当前使⽤的shell程序,当系统登录shell时默认使⽤的是/bin/bash2. exit 退出当前shell3. cat /etc/shells查看设备安装的所有shell程序4. pstree 查看进程树5. tty 查看登录⽅式 TTY查看登陆⽅式,tty1说明是在终端上登陆的。
pts说明是远程登陆的,0说明为从Window上登陆的。
6. type 查看是内部命令还是外部命令如下,查看cd 和ls命令7.enable -a 查看所有内嵌命令8. which 查看外部命令位置(以及帮助信息)9. whereis 查看外部命令位置10. man 查看外部命令使⽤说明,如man ls(ls 为外部命令)11. help 查看内部命令的使⽤说明,如help cd( cd 为内部命令),当⽤help查看ls这个外部命令时,是查询不出来的12. whatis 查看和更新数据库信息(帮助⽂档)1. ctrl+c 终⽌shell命令第四章问题解决没有注意到⼀些路径的设置,然后出现了些错误或者命令没执⾏成功。
Mac终端Shell脚本编写技巧
Mac终端Shell脚本编写技巧Shell脚本是一种用于自动化任务的编程语言,在Mac终端中使用Shell脚本可以方便地完成一系列任务,例如文件操作、系统管理、软件安装等。
本文将介绍一些Mac终端Shell脚本编写的技巧,帮助你更好地利用Shell脚本来提高工作效率。
一、脚本文件的创建与权限设置在Mac终端中创建一个Shell脚本文件非常简单,首先打开终端,然后通过以下命令创建一个新的脚本文件:```shelltouch script.sh```这里的script.sh是你自定义的脚本文件名。
创建完脚本文件后,可以通过以下命令给脚本文件添加执行权限:```shellchmod +x script.sh```这样就可以通过./script.sh来执行这个脚本文件了。
二、Shell脚本的基本语法Shell脚本使用一系列命令和控制结构来实现特定的功能。
以下是一些常用的Shell脚本语法:1. 变量的定义和使用在Shell脚本中,可以使用变量来存储数据,并在需要的时候进行调用。
变量的定义和使用可以通过以下语法实现:```shellname="John"echo $name```这里的name是一个变量,存储了"John"这个字符串。
通过echo命令可以打印出该变量的值。
2. 条件判断条件判断是Shell脚本中常用的控制结构之一,可以用于根据不同的条件执行不同的代码块。
以下是一个条件判断的示例:```shellif [ $age -gt 18 ]; thenecho "You are an adult."elseecho "You are a teenager."fi```这里的age是一个变量,根据其值的大小来判断是否成年。
3. 循环循环是Shell脚本中另一个常用的控制结构,可以用于重复执行某些代码块。
以下是一个循环的示例:```shellfor (( i=0; i<5; i++ )); doecho $idone```这个循环会打印出0到4这5个数字。
shell常用测试命令
shell常⽤测试命令预定义变量: 预定义变量是由Bash程序预先定义好的⼀类特殊变量,⽤户只能使⽤预定义变量,⽽不能创建新的预定义变量,也不能直接为预定义变量赋值。
预定义⽐变量使⽤"$"符合和另⼀个符号组合表⽰。
$#:表⽰获取命令中位置参数的个数。
$*:表⽰获取所有位置参数的内容。
$?:表⽰前⼀条命令执⾏后的返回状态,返回值为0表⽰执⾏正确,任何⾮0值均表⽰出现异常。
$0:表⽰获取当前执⾏的脚本或程序的名称。
$n:表⽰获取执⾏shell脚本的第n个参数,n=1..9,如果⼤于9⽤⼤括号括起来${10}$$:获取当前shell的进程号(pid) ⽰例:echo "$$" >m.pid$!:执⾏上⼀个指令的PID,上⼀个后台运⾏进程的进程号$_:在此之前的命令(上⼀个命令)或脚本的最后⼀个参数预定义变量进阶:$* : 将命令⾏所有参数视为单个字符串,等同于“$1$2$3”$@ : 将命令⾏每个参数视为单独的字符串,等同于“$1” “$2” “$3”。
这是将参数传递给其他程序的最佳⽅法,因为他会保留所有内嵌在每个参数⾥的任何空⽩;⽂件测试:-d测试是否为⽬录(Directory)。
-s file ⽂件⼤⼩⾮0时为真。
-e测试⽬录或⽂件是否存在(Exist)。
-f测试是否为⽂件(File)。
-r测试当前⽤户是否有权限读(Read)。
-w测试当前⽤户是否有权限写(Write)。
-x测试是否有执⾏权限(Excute)。
附:-d参数使⽤⽰例:#[ -d /tmp/ ] #echo $? //查看前⼀条命令的返回值,0表⽰成⽴,tmp⽬录存在。
#[ -d /tmp/ ] && echo "YES" //如果tmp⽬录存在则在屏幕上打印YES。
整数值⽐较:-eq第1个数等于(Equal)第2个-ne第1个数不等于(Not Equal)第2个数-gt第1个数⼤于(Greater Than)第2个数-lt第1个数⼩于(Lesser Than)第2个数-le第1个数⼩于或等于(Lesser or Equal)第2个数-ge第1个数⼤于或等于(Greater or Equal)第2个数 附:-gt参数使⽤⽰例:#[ 6 -gt 5 ] && echo "Too many"在 [] 中使⽤的⽐较符在(()) , [[]]中使⽤的⽐较符-eq==-ne!=-gt>-ge>=-lt<-le<=字符串⽐较:=第1个字符串与第2个字符串相同。
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也就终⽌了。
详解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命令内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
