启动网站集约化建设,全屋定制加盟哪个品牌好,江苏建设厅厅长徐其耀,安阳网站推广Shell概述
shell是一个命令行解释器#xff0c;它接收应用程序/用户命令#xff0c;然后调用操作系统内核
脚本入门
脚本格式
脚本以#!/bin/bash开头#xff08;指定解析器#xff09;
helloworld
# 创建脚本
[linuxlocalhost datas]$ cat helloworld.sh
#!/bin/bas…Shell概述
shell是一个命令行解释器它接收应用程序/用户命令然后调用操作系统内核
脚本入门
脚本格式
脚本以#!/bin/bash开头指定解析器
helloworld
# 创建脚本
[linuxlocalhost datas]$ cat helloworld.sh
#!/bin/bash
echo hello huangxb# 执行脚本方式1
[linuxlocalhost datas]$ bash helloworld.sh
hello huangxb# 执行脚本方式2
[linuxlocalhost datas]$ ./helloworld.sh
-bash: ./helloworld.sh: 权限不够方式1本质是bash解析器帮你执行脚本所以脚本本身不需要执行权限方式2本质是脚本自己需要执行所以需要执行权限
多命令处理 在linux家目录下创建一个bangzhang.txt并在文件中写入I IOVE YOU字符
#!/bin/bash
cd /home/linux/
touch banzhang.txt
echo I LOVE YOU banzhang.txtShell中的变量
常用系统变量
$HOME $PWD $SHELL $USER
[linuxlocalhost datas]$ echo $HOME
/home/linux
[linuxlocalhost datas]$ echo $PWD
/home/linux/datas
[linuxlocalhost datas]$ echo $SHELL
/bin/bash
[linuxlocalhost datas]$ echo $USER
linux自定义变量
基本语法
定义变量变量值 等号两边不能留有空格撤销变量unset 变量输出变量echo $变量声明静态变量 readonly 变量注意不能unset
[linuxlocalhost datas]$ A1
[linuxlocalhost datas]$ echo $A
1
[linuxlocalhost datas]$ unset A变量定义规则
变量名称可以由字母数字和下划线组成不能以数字开头环境变量名建议大写等号两侧不能有空格在bash中变量默认类型都是字符串类型无法直接进行数值运算变量的值如果有空格需要使用双引号或单引号括起来
[linuxlocalhost datas]$ DA B C
[linuxlocalhost datas]$ echo $D
A B C可把变量提升为全局变量可供其他shell程序使用 export 变量
特殊变量
$n
$n 描述n为数字$0代表脚本名称10以内参数用$1-9 表 示 10 以 上 的 需 要 用 大 括 号 包 含 9表示10以上的需要用大括号包含9表示10以上的需要用大括号包含{10}
#!/bin/bash
echo $0 $1 $2 $3$#
$# (功能描述获取所有输入参数个数常用于循环)
#!/bin/bash
echo $0 $1 $2 $3
echo $#$* 描述代表命令行中所有的参数把所有参数看成一个整体$ 描述也代表命令行中所有的参数不过把每个参数区分对待
[linuxlocalhost datas]$ bash parameter.sh test1 test2
parameter.sh test1 test2
2
test1 test2
test1 test212345
$?
$? 描述最后一次执行命令的状态0正确执行
运算符
$((运算式)) 或 $[运算式]expr ,-,\*,/,% 加减乘除取余expr运算符间要有空格
# 计算23
[linuxlocalhost datas]$ expr 2 3
5# 计算23*4
## 方式1
[linuxlocalhost datas]$ expr expr 2 3 \* 4
20## 方式2
[linuxlocalhost datas]$ s$[(23)*4]
[linuxlocalhost datas]$ echo $s
2012345678910111213
条件判断
基本语法
[condition] (注意 condition前后要有空格)
常用判断条件
两个整数之间比较
符号描述-ltless than小于-le(less equal) 小于等于-eq(equal)等于-gt(greater than) 大于-ge(greater equal) 大于等于-ne(not equal) 不等于
文件权限判断
-r 有读的权限-w 有写的权限-x 有执行的权限
文件类型判断
-f 文件存在并且是一个常规文件-e 文件存在-d 文件存在病是一个目录
# 判断23是否大于2
[linuxlocalhost datas]$ [ 23 -gt 2 ]
[linuxlocalhost datas]$ echo $?
0# 判断helloworld.sh是否有写入权限
[linuxlocalhost datas]$ [ -w hellowrld.sh ]
[linuxlocalhost datas]$ echo $?
1# 判断目录中文件是否存在
[linuxlocalhost datas]$ [ -e /home/linux/datas ]
[linuxlocalhost datas]$ echo $?
01234567891011121314
多条件判断 ||
流程控制
IF判断
[linuxlocalhost datas]$ cat if.sh
#!/bin/bash
if [ $1 -eq 1 ]
thenecho 班长真帅
elif [ $1 -eq 2 ]
thenecho 班长真丑
fi
[linuxlocalhost datas]$ bash if.sh 2
班长真丑1234567891011
case 语句
[linuxlocalhost datas]$ cat case.sh
#!/bin/bash
case $1 in
1)echo 班长
;;
2)echo 学习委员
;;
3)echo 体育委员
;;
esac
[linuxlocalhost datas]$ bash case.sh 2
学习委员123456789101112131415
for循环
语法1
[linuxlocalhost datas]$ cat for.sh
#!/bin/bash
s0
for((i1;i100;i))
dos$[$s$i]
done
echo $s
[linuxlocalhost datas]$ bash for.sh
505012345678910
语法2
[linuxlocalhost datas]$ cat for2.sh
#!/bin/bash
for i in $*
doecho $i
done
[linuxlocalhost datas]$ bash for2.sh 1 2
1
2123456789
WHILE循环
[linuxlocalhost datas]$ cat while.sh
#!/bin/bash
s0
i1
while [ $i -le 100 ]
dos$[$s $i]i$[$i 1]
done
echo $s[linuxlocalhost datas]$ bash while.sh
505012345678910111213
read读取控制台输入
read(选项)(参数)1
-p 指定读取值时的提示符-t 指定读取值时等待的时间秒
# 提示7秒内读取控制台输入的名称
[linuxlocalhost datas]$ cat read.sh
#!/bin/bash
read -t 7 -p 在7s内请输入你的名字 NAME
echo $NAME
[linuxlocalhost datas]$ bash read.sh
在7s1234567
函数
系统函数
basename
basename [string / pathname] [suffix] 描述basename命令会删掉所有的前缀包括最后一个‘/’字符然后将字符串显示出来1
# 方式1
[linuxlocalhost datas]$ basename /home/linux/banzhang.txt
banzhang.txt# 方式2
[linuxlocalhost datas]$ basename /home/linux/banzhang.txt .txt
banzhangdirname
dirname 文件绝对路径 描述从给定的包含绝对路径的文件名中去除文件名非目录的部分然后返回剩下的路径目录的部分1
[linuxlocalhost datas]$ dirname /home/linux/banzhang.txt
/home/linux12
自定义函数
# 格式
[ function ] funname[()]
{Action:[return int;]
}
funname# DESC 计算输入两个参数的值
[linuxlocalhost datas]$ cat sum.sh
#!/bin/bash
function sum(){s0;s$[$1 $2]echo $s
}
read -p input your param1: P1
read -p input your param2: P2
sum $P1 $P2
[linuxlocalhost datas]$ bash sum.sh
input your param1:1
input your param2:2
3shell工具
cut
cut命令从文件的每一行剪切字节字符和字段并将这些字节字符和字段输出 cut [选项参数] filename
-f 列号提取第几列-d 分隔符按照指定分隔符分隔列
# DESC 切割cut.txt第一列
[linuxlocalhost datas]$ cat cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
[linuxlocalhost datas]$ cut -d -f 1 cut.txt
dong
guan
wo
lai
le# DESC 获取第三行第一个单词
[linuxlocalhost datas]$ cat cut.txt | grep guan | cut -d -f 1
guansed
sed是一种流编辑器它一次处理一行内容处理时把当前处理的行存储在临时缓冲区中成为“模式空间”,接着sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕接着处理下一行这样不断重复知道文件末尾文件内容并没有改变除非你使用重定向存储输出 sed [选项参数] ‘command’ filename
-e 直接在指令列模式上进行sed的动作编辑
命令功能描述
a 新增d 删除s 查找并替换
# DESC 在第二行后增加mei nv字符
[linuxlocalhost datas]$ sed -e 2a mei nv sed.txt
dong zhen
guan zhen
mei nv
wo wo
lai laiawk
awk 一个强大文件分析工具把文件逐行的读入以空格为默认分隔符将每行切片切开的部分再进行分析处理
awk [选项参数] pattern1 {action1} pattern2{action2}.. filename-F 指定输入文件分隔符-v 赋值一个用户定义变量
sort
sort 命令是在Linux里非常有用它将文件进行排序并将排序结果标准输出
sourt [选项] (参数)参数描述-n依照数值大小排序-t以相反的顺序排序-t设置排序时使用的分隔字符-k指定需要排序的列