linux shell(bash)脚本基础与编程(echo read alias sed)

一.shell基础

1.shell脚本的执行方式

1.1 echo(打印)

格式:echo 'nihao‘ #把nihao打印出来'

1.1.1 -e 添加后可以反斜杠控制字符转换
控制字符作用
\\输出\本身
\n换行
\ttab制表符
1.1.2 -e 输出颜色

格式:echo -e "\e[31m 内容 \e[0m"

字符颜色
30m黑色
31m红色
32m绿色
33m黄色
34m蓝色
35m洋红色
36m青色
37m白色

1.2 read(接受键盘输入)

变量承接:read -p “请输入指定内容” name #这里name就承接上用户输入的值了,注意name和前面的有空格相隔

  1. -p(prompt-提示) ‘提示信息’ 表示在等待输入时的提示信息
  2. -t 表示等待时间
  3. -s 表示隐藏输入的信息

1.3 第一个脚本

内容:开头必须写 #!bin/bash
赋予权限:chmod 755 xx.sh
执行:①当前目录bash xx.sh②其它目录bash /tmp xx.sh

2.bash脚本基本功能

2.1 alias(别名)

格式:alias 别名=’原命令‘ #这里只能临时生效
别名永久生效:vim /root/.bashrc
删除别名:unalias 别名
查看别名状态数目:alias
说明:命令执行顺序优先级

  1. 先执行绝对路径或者相对路径执行的命令。
  2. 其次是执行别名。
  3. 第三顺序是bash内部命令。
  4. 第四顺序按$PATH环境变量定义的目录来查找。

2.2 输出重定向

格式:命令 &> 文件 #无论是否输出都保存到指定文件,特别说明>表示覆盖添加;>>表示追加添加

2.3 多命令执行

符号作用
;按逗号分隔的顺序执行
&&逻辑与,当命令1正确命令2才能执行
||逻辑或,当命令1错误命令2正确执行;命令1正确命令2不执行

2.4 管道符

格式:a | b
解释:命令a作为命令b的对象
举例:ls | more比如ls很长多于一页这样写就能像more阅读文件一页翻页看。

2.5 特殊符号

符号作用
’ ’里面所有的内容都没有特殊含义比如$
" "部分特殊符号没有特殊含义,但是如$有特殊含义
` `反引号,里面填写系统命令
$()里面填写系统命令
$用来打印变量使用

3.bash变量

3.1 用户自定义变量

解释:只能在当前shell中显示。
添加:name=5
查询:set
去除变量:unset 变量名字

3.2 环境变量

解释:可以在所有的shell中显示。
添加:export name=5
查询:env
去除变量:unset 变量名字

3.3 位置参数变量

符号作用
$nn表示数字,当n>10需要写为${n}
$*表示所有参数,把所有变量看为一个整体(配合for使用)
$@表示所有参数,把每个变量区分对待(配合for使用)

解释:
a.sh

#!bin/bash
echo $1
echo $2

命令行:bash a.sh 1 2
输出:

1
2

3.4 预定义变量

符号作用
$?最后一次执行任务返回状态,如果为0表明上一步正确执行;不为0表示上一步执行失败。
$$当前进程的进程号

3.5 运算

解释:bash默认的类型都是字符类型
运算符格式:$[需要运算的内容]

4.字符提取命令

4.1 cut(切割)

格式:cut 选项 文件名

  1. -f 列号 -提取第几列(fields-领域)
  2. -d 分隔符-按照指定分隔符分割列(delimiter-分隔符)[默认不加该选项就认为是tab打出的空格]

二.shell编程

1.基础正则表达式

前言:通配符和正则表达式区别。通配符用于文件名称搜索;正则表达式用于文件内容检索。通配符中*表示任意内容?表示单个字符。

符号作用
*匹配前面字符0个或者多个
+匹配前面字符1个或者多个
匹配前面字符0个或一个
.匹配除了换行符外的任意一个字符
^匹配行首
$匹配行尾
[]只匹配一个字符,如[0-9]匹配一个数字
[^]表示不匹配什么
{n}匹配前面字符确定的n次
{n,}匹配前面字符至少n次
{n,m}匹配前面字符至少n次最多m次
\转义字符

格式:grep 正则表达式 文件名称

2.sed(编辑命令)

前言:类似于vim,可以直接通过命令行编辑。
格式:sed 选项 动作 文件的名字

2.1 运算选项

  1. -e:允许对于多条命令进行编辑
  2. -i:直接修改文件(不添加的话不会对文件进行任何修改)
  3. -n:只把经过sed处理的数据输出出来(很关键)

2.2 动作

动作解释
aAppend-追加在该行后添加一行或多行
cReplace-行替换,c后面的字符串替换原数据行
iInsert-在当前行前添加一行或多行
d:Delete-删除
p:Print-打印
s:String-字符串替换,用一个字符串替代另一个字符串,格式:s/旧字符/新字符/g

2.3 演示

  1. sed -n 2p a.txt表示打印出a.txt的第二行
  2. sed -i 2d a.txt表示删除第二行
  3. sed -i '1a hello jack' a.txt表示在第一行后追加写上’hello jack’
  4. sed -i '2c jkl' a.txt表示把第二行替换为jkl
  5. sed -i '1s/nihao/root/g' a.txt表示把第一行的nihao替换为root

3.条件判断

3.1 文件类型

内容解释
-ddirectory-判断目录是否存在,存在为真。
-eexists-判断文件是否存在,存在为真。
-ffile-判断文件是否存在,存在为真。

格式:[ -e 1.txt ]#判断1.txt是否在当前目录下(注意中括号周围的空格)

3.2 文件权限

缺点:不能判断哪个用户组用有该权限,只要有一个用户组用于该权就返回真。

内容解释
-r判读是否有读的权限
-w判断是否有写的权限
-x判断是否有操作的权限

3.3 数字间的比较

内容解释
-eq相等(equal)
-ne不相等(not equal)
-gt大于(greater than)
-lt小于(less than)
-ge大于等于(greater equal)
-le小于等于(less equal)

3.4 字符串间的判断

内容解释
-z 字符串判断字符串是否为空(zero)
-n 字符串判断字符串是否为不空(no-zero)
==判断两个字符串是否相等(两个符号与内容直接要有空格不然无法判断)
!==判断两个字符串是否不相等(两个符号与内容直接要有空格不然无法判断)

注意:以上都是用于[],切记空格的保持。

4.流程控制

4.1 if控制语句

格式①:

if [条件判断式子]
then
	content
elif [条件判断式子]
then
	content
else
	content
fi

注意:if和elif后面都必须跟着then

4.2 case语句

格式①:

case $变量 in
	"y")
		echo 'aa'
		;;
	'n')
		echo 'bb'
		;;
	*)
		echo 'll'
		;;
esac

4.3 for语句

格式①:

for i in $()
	do
		echo $i
	done

格式②:

for ((i=1;i<100;i++))
	do 
		命令
	done

注意:切记格式②中for后面双小括号内容顺序不可以变化

4.4 while循环

格式①:

while [ $i -lt 2 ]
	do
		命令	
	done

三.shell散记

1.大小写转换

转大写:${a^^}
转小写:${a,,}

2.退出脚本

写入exit即可

四.shell编程与其它语言区别

  1. shell主要是为了命令的执行,为了表示i=i+1正确应该写为i=$[$i+1],这样命令就会执行赋值给i是可以执行给系统的命令。
  2. shell比较大小两种方式[] and (()),推荐后者符合其它编程语言习惯但是只能处理数字前者处理能力强大可字符串可数字可其它功能但必须严格按格式来写注意空格
  3. 特殊处:$()系统命令;$[]运算法则;${}数据处理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值