shell是什么
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序.
脚本格式要求
1.脚本以#!/bin/bash 开头 2.脚本需要有可执行权限(即x)
脚本的执行方式
方式1:首先要赋予脚本x 权限,再执行脚本 如:有一个helloworld.sh脚本 chmod 744 helloworld.sh 给所有用户一个x权限 ./helloworld.sh (相对路径)或/root/shell/helloworld.sh (绝对路径)执行脚本 方式2:sh 脚本 ,此时不用赋予脚本x权限,直接执行即可 如:sh ./helloworld.sh (相对路径)
echo "helloworld"
[root@localhost myshell]
helloworld
[root@localhost myshell]
helloworld
[root@localhost myshell]
[root@localhost myshell]
helloworld
[root@localhost myshell]
helloworld
shell的变量
Linux Shell中的变量分为:系统变量 和用户自定义变量 系统变量:$HOME ,$PWD ,$SHELL ,$USER 等,比如:echo $HOME 显示当前shell中的所有变量:set 1.定义变量:变量=值 2.撤销变量:unset 变量 3.声明静态变量:readonly 变量 注意:静态变量不能unset 定义变量的规则: 1.变量名称可以由字母,数字和_ 组成,但是不能以数字开头 2.等号两边不能有空格 3.变量名称一般习惯为大写 将命令的返回值赋给变量: A=`ls -a`反引号,运行里面的命令,并把结果返回个变量A A=$(ls -a)等价于反引号
设置环境变量
1.export 变量名=变量值 ,将shell变量输出为环境变量 2.source 配置文件 (/etc/profile),让修改后的配置信息立即生效 3.echo $变量名 ,查询环境变量的值
注释
#单行注释 :<<!多行注释!
位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量.比如:./helloworld.sh 200 ,这个就是执行shell的命令行,可以在helloworld脚本中获取到参数信息
$n | n为数字,$0代表命令本身,$1-
9
代
表
第
一
到
第
九
个
参
数
,
十
以
上
的
参
数
需
要
用
大
括
号
包
含
,
如
‘
9代表第一到第九个参数,十以上的参数需要用大括号包含,如`
9代表第一到第九个参数,十以上的参数需要用大括号包含,如‘{10} ` |
---|
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 | $@ | 这个变量也代表命令行中所有的参数,$@把每个参数区分对待 | $# | 这个变量代表命令行中所有参数的个数 |
预定义变量
预定义变量:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
$$ | 当前进程的进程号(PID) |
---|
$! | 后台运行的最后一个进程的进程号(PID) | $? | 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确执行.如果这个变量的值为非0 ,则证明上一个命令执行不正确 |
运算符
1.$((运算式)) 或$[运算式] 2.expr m + n ,注意:expr运算符间要有空格 expr \* ,/,% 乘 ,除,取余 如要计算(2+3)*4: 方式1:result=$(((2+3)*4)) 方式2:result=$[(2+3)*4] 方式3:temp=`expr 2 + 3` result=`expr $temp * 4`
条件判断
[ 条件 ] 注意条件 前后要有空格 #非空返回true 如: [ 条件 ] 返回true(非空) [ ] 返回false [ 条件 ] && echo DK || echo notok 条件满足,执行后面的语句 常用判断条件:
两个整数的比较 | |
---|
-lt | 小于 | -le | 小于等于 | -eq | 等于 | -gt | 大于 | -ge | 大于等于 | -ne | 不等于 | = | 字符串比较 | 按照文件权限进行判断 | | -r | 有读的权限 | -w | 有写的权限 | -x | 有执行的权限 | 按照文件类型进行判断 | | -f | 文件存在并且是一个常规的文件 | -e | 文件存在 | -d | 文件存在并且是一个目录 |
if elif
if [ 条件判断式 ];then 程序 fi 或者: if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else then 程序 fi 注意:[ 条件判断式 ],中括号和条件判断式之间必须有空格
case语句
case $变量名 in “值1”) 如果变量的值等于值1,则执行程序1 ;; “值2”) 如果变量的值等于值2,则执行程序2 ;; ...省略其它分支 *)如果变量的值都不是以上的值,则执行此程序 ;; esac
for循环
基本语法1: for 变量 in 值1 值2 值3 … do 程序 done 基本语法2: for((初始值;循环控制条件;变量变化)) do 程序 done
while循环
while [ 条件判断式 ] do 程序 done
read
read读取控制台输入 基本语法:read(选项)(参数)
选项 | |
---|
-p | 指定读取值时的提示符 | -t | 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 | 参数 | | 变量 | 指定读取值的变量名 |
函数
shell编程和其它编程语言一样,有系统函数,也可以自定义函数. 1.系统函数: basename 返回完整路径最后/ 的部分,常用于获取文件名 basename [pathname] [suffix] ,suffix为后缀,如果suffix被指定了,basename会将pathname中的suffix去掉 dirname 返回完整路径最后/ 的前面的部分,常用于返回路径部分 dirname 文件绝对路径 ,从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分). 2.自定义函数: 基本语法: [ function ] funname[()] { Action; [return int;] } #中括号中的可不写 调用直接写函数名:funname [值]
cut
cut的工作就是’剪’,就是在文件中负责剪切数据用的.cut命令从文件的每一行剪切字节,字符和字段并将这些字节,字符和字段输出. cut [选项参数] filename 说明:默认分隔符是制表符
选项参数 | 功能 |
---|
-f | 列号,提取第几列 | -d | 分隔符,按照指定分隔符分割列 |
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
sed
sed是一种流编辑器,它一次处理一行内容.处理前,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出. sed [选项参数] command filename
选项参数 | 功能 |
---|
-e | 直接在指令列模式上进行sed的动作编辑 |
命令 | 功能描述 |
---|
a | 新增,a的后面可以接字符串,在下一行出现 | d | 删除 | s | 查找并替换 |
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
注意:'g'表示global,全部替换
[root@localhost myshell]
[root@localhost myshell]
awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理. awk [选项参数] 'pattern1{action1} pattern2{action2}...' filename pattern 表示awk在数据中查找的内容,就是匹配模式 action 在找到匹配内容时所执行的一系列命令
选项参数 | 功能 |
---|
-F | 指定输入文件分隔符 | -v | 赋值一个用户定义变量 |
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
awk的内置变量
变量 | 说明 |
---|
FILENAME | 文件名 | NR | 已读的记录数 | NF | 浏览记录的域的个数(切割后,列的个数) |
[root@localhost myshell]
[root@localhost myshell]
[root@localhost myshell]
sort
sort命令将文件进行排序,并将排序结果标准输出 sort(选项)(参数)
选项 | 说明 |
---|
-n | 依照数值的大小排序 | -r | 以相反的顺序来排序 | -t | 设置排序时所用的分隔符 | -k | 指定需要排序的列 |
参数:指定待排序的文件列表
[root@localhost myshell]
[root@localhost myshell]
面试题
[root@localhost myshell]
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
[root@localhost myshell]
if [ -f file.txt ]
then
echo "文件存在"
else
echo "文件不存在"
fi
|