Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。是一个功能强大的编程语言,易编写、易调试、灵活性高。

Linux提供的Shell解析器有六种:cat /etc/shells
/bin/sh/bin/bash,在CentOS中默认解析器为bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh
脚本格式
-
脚本以
#!/bin/bash开头#!/bin/bash echo "hello world" -
运行脚本文件可通过:
sh xx.sh、bash xx.sh、./xx.sh(注意需要.sh具备执行权限[x],chmod 777) -
通过
touch xx.sh创建脚本文件,通过vim xx.sh编辑脚本文件。
系统变量
$HOME,当前登录用户的home目录$PWD,当前所在目录路径$SHELL,默认shell解析器$USER,当前登录用户
自定义变量
- 基本语法
- 定义变量:变量=值
- 撤销变量:
unset 变量名 - 声明静态变量:
readonly 变量名,注意不能撤销静态变量,重启即无效。 - 变量定义规则:字母、数字、下划线组成,不能以数字开头,建议环境变量大写。
- 等号左右无空格,严格要求
- 变量默认为字符串类型,无法直接进行数值运算。
- 变量的值若有空格,需要用引号括起来
- 将脚本中的局部变量,提升为全局变量:
export 变量名
特殊变量
-
$n-
功能描述:n为数字。
$0,代表该脚本名称;$1-$9,代表第一到第九个参数;第十以上的参数需要用${10}表示。touch partmeter.shvim partmeter.sh#!/bin/bash echo "$0 $1 $2"bash partmeter.sh p1 p2partmeter.sh p1 p2
-
-
$#-
功能描述:获取所有输入参数个数,常用于循环
#!/bin/bash echo "$#"bash partmeter.sh p1 p22
-
-
$*-
功能描述:获取命令行中所有的参数,将所有入参看做一个整体
#!/bin/bash echo "$*"bash partmeter.sh p1 p2
p1 p2
-
-
$@-
功能描述:获取命令行中所有的参数,将所有入参区分对待
#!/bin/bash echo "$@"bash partmeter.sh p1 p2
p1 p2
-
-
$?- 功能描述:最后一次执行命令的返回状态。若变量值为0,证明上一次命令执行正确;若变量值为非零,证明上一个命令执行出现错误。
运算符
- 基本语法
$((运算式))或$[运算式]expr运算(运算符之间必须有空格)+,加-,减\*,乘/,除%,取余- 运算执行符号:`expr 2 + 3
条件判断
- 基本语法
[ condition ],注意表达式前后需要有空格[ test ],条件非空即为true;[],条件为空即为false;
- 常用判断条件
=字符串比较-lt,小于-le,小于等于-eq,等于gt,大于ge,大于等于ne,不等于-r,有读的权限-w,有写的权限-x,有执行的权限-f,文件存在且是一个常规文件file-e,文件存在-d,文件存在且是一个目录directory
- 多条件判断
&&,前一条命令执行成功时,才执行后一条命令||,前一条命令执行失败时,才执行后一条命令
流程控制
if
-
基本语法:
if后要有空格,条件表达式[]前后必须有空格;elif,代表else if;fi结尾。#!/bin/bash if [ condition1 ];then content1 elif [ condition2 ] then content2 fi
case
-
基本语法:
case $变量名 in value)格式,;;case结尾,类似break;*)代表default分支;esac结尾;#!/bin/bash case $1 in 1) content1 ;; 2) content2 ;; 3) content3 ;; *) content4 ;; esac
for
-
基本语法1:
for((初始值;循环控制条件;变量变化))格式;do方法体;done结尾;具体累加1-100的和:#!/bin/bash s=0 for((i=1;i<=100;i++)) do s=$[$s+$i] done echo $s -
基本语法2:
for 变量 in value1 value2 value3格式;$@区分处理每个入参,$*入参为整体进行处理#!/bin.bash for i in "$*" do echo "ceshi * $*" done for j in "$@" do echo "ceshi @ $@" donebash ceshi.sh zs ls
输出结果为:
ceshi * zs ls
ceshi @ zs
ceshi @ ls
while
-
基本语法:
while [ condition ]格式;do方法体;done结尾;具体累加1-100的和:#!/bin/bash s=0 i=0 while [ $i -le 100] do s=$[$s+$i] i=$[$i+1] done
Read读取控制台输入
-
基本语法:
read(选项)(参数)- 选项
-p,指定读取值时的提示符-t,指定读取值时等待的时间(秒)
- 参数
- 变量:指定读取值的变量名
- 选项
-
举例:七秒内在控制台上输入name
#!/bin/bash read -t 7 -p "input your name in 7 seconds" name echo $name
函数
系统函数
basename [string/pathname][suffix],截取指定路径下的文件名称dirname 文件绝对路径,从给定包含绝对路径的文件名中取出文件的所在路径
自定义函数
-
基本语法
// 声明函数 function funname[()]{ action; [return int;] } funname // 执行函数
Shell工具
cut命令
-
从文件的每一行剪切字节、字符和字段,并将这些字节、字符、字段输出。
-
基本用法
-
cut [选项参数] filename -
选项参数
-f,列号,提取第几列-d,分隔符,按照指定分隔符分割列,默认分割符为制表符\t
-
举例:以空格为分割符,切割文件内容第二列及以后内容输出
cut -d " " -f 2- cut.txt
-
sed
-
流编辑器,一次处理一行内容。处理行内容时,把当前的行内容存储在临时缓存区中,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后将内容输出。接着处理下一行,直到文末末尾。
-
基本用法
-
sed [选项参数] "命令功能" filename -
选项参数
-e,直接在指定列模式上进行sed的动作编辑
-
命令功能(常用)
a,新增d,删除s,查找并替换
-
举例:
-
在文件第二行添加内容:add content
sed "2a add contend" filename -
删除文件中包含wo的行
sed "/wo/d" filename -
用ni替换文件中的wo
sed "s/wo/ni/g" filename,g代表全局替换 -
删除文件第二行并用ni替换文件中的wo
sed -e "2d" -e "s/wo/ni/g" filename
-
-
awk
-
文本分析工具,把文件逐行读入,默认以空格为分隔符将每行切片,切开的部分可在进行分析处理。
-
基本用法:
awk [选项参数] 'pattern1{action1} pattern2{action2} ...' filename;pattern匹配正则表达式;action匹配内容符合时所执行的命令。-
选项参数
-F,指定输入文件分隔符-v,复制一个用户定义变量
-
内置变量
FILENAME,文件名NR,已读记录数NF,浏览记录的域的个数(切割后,列的个数)
-
举例:搜索文件以root开头的所有行,并输出该行的第七列
awk -F : '/^root/{print $7}' filename
-
sort
-
文件排序,并按照排序结果标准输出
-
基本用法
-
sort(选项)(参数)-
选项
-
-n,按照数值大小排序 -
-r,以相反的顺序排序 -
-t,设置排序的所用分割字符 -
-k,指定需要排序的列 -
参数
- 指定待排序的文件列表
-
举例:文件按照冒号分割,第三列倒序排序
sort -t : -nrk 3 filename
-
-
本文深入讲解Shell脚本的基础知识,包括Shell的定义、主要类型、脚本格式、变量定义与使用、条件判断、流程控制等内容,同时介绍了cut、sed、awk、sort等Shell工具的基本用法。
2110

被折叠的 条评论
为什么被折叠?



