Shell命令和流程控制[linux常用命令的使用]
在shell脚本中使用三类命令:
- unix命令
- 概念:管道、重定向、backtick
- 流程控制
1 unix命令
echo "some text":在屏幕上输出信息
ls:文件列表
wc -l file wc -w file wc -c file:计算文件的行数(line)、单词数(word)、字符数(character)。
cp sourcefile destfile:文件拷贝
mv oldname newname:重命名文件或移动文件
rm file:删除文件
grep 'pattern' file:在文件内搜索字符串和正则表达式的字符串。
cut -b column file:将指定范围内的文件内容输出到标准输出设备(屏幕)上。比如:输出每行第5至9个字符 cut -b5-9 file.txt.
cat file.txt:输出文件内容到标准输出设备(屏幕)上。
file somefile:取得文件somefile的文件类型
read var:提示用户输入,并将输入内容赋值给变量var.
sort file.txt:对file.txt文件所有行进行排序。
uniq:只输出文件中内容不一致的行,如:sort file.txt | uniq
expr:进行数学运算,比如进行2+3的运算:expr 2 "+" 3
find:搜索文件,如根据文件名搜索:find . -name filename -print.
tee: 将数据输出到标准输出设备(屏幕) 和文件,比如:somecommand | tee outfile
basename file: 返回不包含路径的文件名,如: basename/bin/tux 会返回 tux
dirname file: 返回文件所在路径,如:dirname /bin/tux 会返回/bin
head file: 打印文本文件开头几行
tail file : 打印文本文件末尾几行
sed: Sed 是一个基本的查找替换程序。可以从标准输入(如命令管道)读入文本,并将结果输出到标准输出(屏幕);该命令采用正则表达式进行搜索。不要和 shell 中的通配符相混淆。比如将 ubuntu 替换为Ubuntu :cat text.file | sed 's/ubuntu/Ubuntu/' > newtext.file
awk: awk 用来提取文本文件中的字段。缺省的字段分割符是空格,可以使用 -F 指定其它分割符。cat file.txt | awk -F, '{print $1"," $3 }',这里我们使用 , 作为字段分割符,同时打印第一和第三个字段。如果该文件内容为 Adam Bor, 34, IndiaKerry Miller, 22, USA,则上述命令的输出为:Adam Bor, IndiaKerry Miller, USA.
ps:进程查看命令。对进程进行监测和控制,了解当前进程的情况,需要查看当前进程。ps是显示瞬间进程的状态,并不动态连续,对进程实时监控,用top命令。
//ps命令,显示瞬间进程的状态,进程查看命令,参数如下
-A:所有的进程均显示出来,与-e具有同样的效用
-a:显示现行终端机下的所有进程,包括其他用户的进程
-u:以用户为主的进程状态
-x:与a一起使用,可列出较完整信息。
eg1:
ps -l F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
S 代表这个程序的状态 (STAT);
UID 代表执行者身份
PID 进程的ID号;
PPID 父进程的ID;
C CPU使用的资源百分比
PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是[- ]
SZ 使用掉的内存大小;
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
TTY 登入者的终端机位置;
TIME 使用掉的CPU 时间。
CMD 所下达的指令名称 eg2:
//列出目前所有的正在内存当中的程序
ps aux
2 概念:管道、重定向、backtick
管道(|):将一个命令的输出作为另外一个命令的输入。比如:grep "hello" file.txt | wc -l
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反短斜线:使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
find . -mtime -l -type f -print:查找过去24小时(-mtime -2表示过去48小时)内修改过的文件。
tar -zcvf lastmod.tar.gz 'find . -mtime -l -type f -print'
3.流程控制
3.1 if表达式
if 表达式如果条件为真则只需then后的部分
if...;then...
...
elif ...;then
...
else
...
fi
//可以使用测试命令来对条件进行测试。比如比较字符串、判断文件是否存在及是否可读等等
//" [] " 来表示条件测试,注意这里的空格,要确保方括号前后的空格。
eg:
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ]:判断$var变量是否相等
[ "$a" = "$b" ]:判断$a和$b是否相等 eg:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
3.2 case表达式
case表达式可以用来匹配一个给定的字符串,不是数字。
eg://case表达式用来匹配一个给定的字符串,而不是数字。
case ... in
...) do something here ;;
esac eg:
#!/bin/sh
ftype=`file "$1"`//``是Esc下面的顿号,表示还需要file指令判断$1的文件类型
case "$ftype" in
"$1: Zip archive"*) unzip "$1" ;;
"$1: gzip compressed"*) gunzip "$1" ;;
"$1: bzip2 compressed"*) bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac
3.3 select表达式
select 表达式:一种bash的扩展应用,用于交互式使用,用户可以从一组不同的值中进行选择。
//select表达式用于交互使用,用户可以从一组不同的值中进行选择。
select var in ... ; do
break
done eg:test003.sh
#/bin/sh
echo "what is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other" ; do
break
done
echo "You have selected $var"
//执行结果
sh test003.sh
what is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
3.4 loop表达式[while-loop、for-loop]
//while-loop将运行直到表达式为真。
while ...; do
....
done //for-loop表达式查看一个字符串(字符串用空格分隔),然后将其赋给一个变量
for var in ....;do
....
done eg1:test.sh
#!/bin/sh
s=0
i=0
while [ "$i" != "100" ] ;do
i=$(($i+1)) //数值运算:((运算内容))
s=$(($s+$i))
done
echo "result is == $s" eg2:
for var in A B C;do
echo "var is $var"
done
//执行结果
var is A
var is B
var is C
3.5 $*
$*:代表["$1c$2c$3c$4"],其中c为分隔字符,默认为空格键,所以本例中代表[ "$1" "$2" "$3" "$4" ]之意。
$#:表示包含参数的个数
$1...$9:表示第一个参数...第九个参数,表示用户从命令行输入的参数。
eg://$*表示特殊的变量,包含了所有输入的命令行数值。
//打印一些RPM包的统计信息
test.sh
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
//运行:test.sh openssh.rpm w3m.rpm webgrep.rpm
$*变量包含3个运行的3个值:openssh.rpm w3m.rpm webgrep.rpm
4 快捷操作符
快捷操作符:&&、|| .
//&&、|| 都是快捷操作符,左边为真则执行右边的语句。eg:A && B
eg1://判断/etc/shadow是否为文件,如果文件存在,就打印内容
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"
eg2:
test.sh://判断$mailfolder是否可读,可读打印文件中From一行[不可读或操作不生效,打印错误信息后脚本退出]
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder
5 test命令和空格的使用
test和[]命令对3类表达式进行测试:
- 字符串比较
- 文件测试
- 数字比较
//赋值语句,之间没有任何空格
password="john"
//条件测试命令,测试变量与john两者相等,test返回0;反之返回1
test "$password" = "john"
//[ expr ],条件测试命令
[ "$password" = "john" ]
5.1 字符串比较
字符串比较选项:

eg1://判断用户的输入是否为空
read password
if [ -z "$password" ]
then
echo "please enter the password"
fi
5.2 文件测试
文件测试的选项:

eg2://判断test.sh是否有可执行权限
if [ -x test.sh ]
then
test.sh
fi
5.3 数字比较
数字比较的选项:

eg3://测试变量status是否等于0
if [ $status -eq 0 ];then
log_success_msg "SMBD is running"
else
log_success_msg "SMBD is not running"
fi
6 编写脚本的一般步骤
一般脚本都有帮助和输入参数,并且写一个伪脚本。脚本里面包含了大多数脚本都需要的框架结构,然后再插入自己的函数。
Shell命令和流程控制[linux常用命令的使用]的更多相关文章
- 类型:linux;问题:linux命令;结果:Linux常用命令大全
Linux常用命令大全 QQ空间新浪微博腾讯微博人人网豆瓣网百度空间百度搜藏开心网复制更多1997 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) una ...
- Linux常用命令速查-汇总篇
Linux常用命令速查-用户管理 Linux常用命令速查-文件管理 Linux常用命令速查-系统监控 Linux常用命令速查-网络管理 Linux常用命令速查-定时任务 Linux常用命令速查-Vim
- Linux常用命令-解压缩篇
前言 Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法. tar tar是linux中最常用的解压缩命令.tar命令可用于处理后缀名为tar,tar ...
- Linux常用命令-文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- Linux 常用命令:解压缩
目录 Linux 常用命令:解压缩 说明 tar 涉及参数说明: 压缩 解压 zip压缩 涉及参数说明: uzip解压 涉及参数说明: gzip 涉及参数说明: 压缩率比较 Linux 常用命令:解压 ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
- linux 常用命令 集锦
第一章 LINUX简介及安装 1一.LINUX介绍 1二.LINUX安装 2三.LINUX目录 2四.总结来说: 3第二章 常用命令及帐户管理 4一.linux命 ...
- linux 常用命令--------雪松整理
linux 常用命令--------雪松整理 博客: http://hi.baidu.com/quanzhou722/blog错误在所难免,还望指正!========================= ...
- Linux常用命令全集
一,安装和登陆命令1,进入图形界面 startx 2,进入图形界面 init 5 3,进入字符界面 init 34,登陆 login 5,关机 poweroff -p 关闭机器的时候关闭电源-n 在关 ...
随机推荐
- Blog.Core 项目已完成升级.NET5.0
(是时候拿出来这种图了) 本文首发于公众号,但是会有新的内容加进来,所以就在博客园新开了一篇,望见谅.截止发稿,Blog.Core项目Master分支已经迁移到了5.0,新建了3.1的分支. 开心的锣 ...
- MSSQL 高并发下生成连续不重复的订单号
参考: https://www.cnblogs.com/h-change/p/6699683.html 这里在数据库层面生成的,经测试确实不会重复. 附上自己修改后的版本,这里也可以预先生成一年的记录 ...
- SpringBoot进阶教程(六十四)注解大全
在Spring1.x时代,还没出现注解,需要大量xml配置文件并在内部编写大量bean标签.Java5推出新特性annotation,为spring的更新奠定了基础.从Spring 2.X开始spri ...
- MyBatis 中 @Param 注解的四种使用场景
https://juejin.im/post/6844903894997270536 第一种:方法有多个参数,需要 @Param 注解 第二种:方法参数要取别名,需要 @Param 注解 第三种:XM ...
- UNP——第三章,套接字编程介绍
1.套接字结构 多数套接字函数都有套接字结构参数,每个协议族都定义了自己的套接字结构,以 sockaddr_ 开始,并对应协议族的唯一后缀. struct sockaddr_in { uint8_t ...
- grep/字符/次数匹配/锚定符/小大括号/wc/tr/cut/sort/uniq
grep:正则表达式,文本过滤工具,能够实现以指定的"模式(Pattern)"逐行搜索文件中的内容,并将匹配到的行显示出来. 模式:是由正则表达式的元字符,其他字符组合起来的匹配字 ...
- MySQL全面瓦解12:连接查询的原理和应用
概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...
- JavaScrip_12.23
笔记系列,零散的知识点,准备以后复习整理使用 JavaScrip - 事件DOM绑定[将函数添加到一个元素对象的属性中] 1.事件 鼠标.键盘.操作等:所有的GUI都有 onclick(单击事件) 例 ...
- 信息收集之——旁站、C段
旁站的概念 旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵.那么,可以查看该网站所在的服务器上是否还有其他网站.如果有其他网站的话,可以先拿下其他网站的webshell,然 ...
- 3种终极方法,彻底解决CDR不显示缩略图!
站长所在的印刷出版行业,一般都是使用版本较低的CDR软件,以便更好的兼容出版厂,不然新版本的文件发厂出片时却打不开,而转低版本的话又容易出错.从最开始的 CorelDRAW 9 到现在的 CORELD ...