shell脚本复习梳理

10 篇文章 0 订阅

目录

一.变量

自定义变量

(1).定义变量

(2).撤销变量

(3).声明静态变量:  readonly  变量

(4).定义全局变量  export 变量名

特殊变量$n

二.运算符

1.基本语法

三.条件判断

(1).基本语法

(2).常用判断条件

1.整数之间比较

2.根据文件权限判断

四.流程控制

(1).if语句

(2). case语句

(3).for循环

1.基本语法1

示例

2.基本语法2

示例

 (4).while循环

基本语法

示例

五.read读取控制台输入

1.基本语法

六.数组

普通数组

定义方法:

查看数组的内容

2.一次定义多个值,下标默认从0开始,

3.数组其他用法

定义关联数组

七.函数

1.系统函数

1).basename 

 2).dirname

 2.自定义函数

八.shell工具

1).cut

2).sed

3).awk

语法格式

内置变量:

4).grep

练习

5).sort排序


一.变量

自定义变量

(1).定义变量

a=1

echo $a

(2).撤销变量

unset 变量

(3).声明静态变量:  readonly  变量

注意:不能unset,只能重启

(4).定义全局变量  export 变量名

特殊变量$n

 $0代表该脚本名称,$1-$9代表第一道第九个参数,十以上的参数要用大括号包含   如${10}

$# 显示参数的个数

$*   $@   代表命令行中所有的参数

$?   上一条命令是否正确执行,成功是0  非0不成功

二.运算符

1.基本语法

(1).  $((运算式))   或    $[运算式]

(2) expr  + , - , \* , |/ , %   加,减,乘,除,取余

        expr 运算符之间要有空格

三.条件判断

(1).基本语法

[condition]  (condition前后要有空格)

(2).常用判断条件

1.整数之间比较

=  字符串之间比较

-gt  大于        -eq 等于        -lt 小于        -ge 大于等于        -le   小于等于    -ne   不等于

2.根据文件权限判断

-r  有读的权限   -w  有写的权限     -x  有执行的权限

-f  文件        -d  目录           -e   文件存在

四.流程控制

(1).if语句

        1.基本语法: 

if [ 条件表达式 ];then

程序

elif [ 条件表达式 ]

then

程序

else

程序

fi

#!/bin/bash
if [ $1 -eq 1 ]
then
echo "1111"
elif [ $1 -eq 2 ]
then
echo "222"
else 
echo "1234567"
fi

(2). case语句

1.基本语法

case $变量名  in

值1)

如果变量的值为1,则执行程序1

;;

值2)

如果变量的值为2,则执行程序2

;;

*)

如果不满足以上条件执行此程序

;;;

esac

示例:

#!/bin/bash
case $1 in
1)
echo '111'
;;
2)
echo '222'
;;
3)
echo '333'
;;
*)
echo '123321'
esac

(3).for循环

1.基本语法1

for (( 初始值;循环控制条件;变量变化 ))

do

程序

done

示例

for循环求1-100的值

#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
sum=$[ $sum + $i ]
done
echo $sum

2.基本语法2

for 变量 in  值1  值2  值3           如果是连续的值,可以用{1..100}表示

do

程序

done

示例

打印所有输入的参数

#!/bin/bash
for i in $*
do
echo $i
done

$*  与  $@ 的区别  不加双引号时没有区别,加了双引号时$*把输入的变量当做了一行,$@还是分开的

#!/bin/bash
for i in "$*"
do
echo $i
done
for j in "$@"
do
echo $j
done

 (4).while循环

基本语法

while [ 条件表达式 ]

do

程序

done

示例

用while求出1-100的和

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum

五.read读取控制台输入

1.基本语法

read(选项)(参数)

选项:

-p: 指定读取值时的提示符

-f: 指定读取值是等待的时间(秒).

参数: 变量

示例:

#!/bin/bash
read -t 7 -p "请输入你的姓名:" name
echo $name

六.数组

普通数组

定义方法:

1.一次声明一个值

letter[0]=a

letter[1]=b

letter[2]=c

查看数组的内容

echo ${letter[*]}  或者是  echo ${letter[@]}

2.一次定义多个值,下标默认从0开始,

name=(zhang wang li zhao qiao cui cao)

3.数组其他用法

直接输出的是数组的第一个元素

echo $name

输出数组中下标为3的元素

echo ${name[3]}

输出数组中下标为1到3的元素

echo ${name[*]:1:3}

输出数组中下标大于2的元素

echo ${name[*]:2}

输出数组中下标小于2的元素

echo ${name[*]::2}

定义关联数组

普通数组

 

 定义关联数组之前必须要声明

declare  -A  数组名

一次赋一个值

declare -A hero

hero[top]=jianji

hero[mid]=ali

一次赋多个值

hero=([jug]=nanqiang [adc]=vn)

注意:一次赋多个值的话,会把数组之前的数据给替换掉

七.函数

1.系统函数

1).basename 

basename  [string/pathname]  [suffix]

功能描述:basename会删掉所有的前缀,然后显示出来

 2).dirname

dirname 文件绝对路径

功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),返回路径名

 2.自定义函数

基本语法

funname(){

action

}

funname

函数返回值,只能通过$?系统变量获得

示例:

从键盘接收两个值,求和

#!/bin/bash
function sum(){
read -p '请输入第一个数字' num1
read -p '请输入第二个数字' num2
echo $(($num1+$num2))
echo $[ $num1 + $num2 ]
}
sum

方法2:

#!/bin/bash
function sums(){
sum=0
sum=$(($1+$2))
echo $sum
}
read -p '请输入第一个数字:' num2
read -p '请输入第二个数字:' num1
sums $num1 $num2

八.shell工具

1).cut

1.基本用法

cut [选项参数]   filename

2.选项参数

-f  列号 取第几列

-d  分隔符       (且为单个字符)

以空格切割sum.sh的第一列

[root@localhost shells]# cut -d " " -f 1 sum.sh

 输出系统变量值,第二个:开始后的所有路径:

 [root@localhost shells]# echo $PATH | cut -f 3-  -d :

2).sed

流编辑器

返回值都是0不管对错

1.基本语法

sed [选项参数] command  filename

2.选项参数说明

-e

3.命令功能描述

a   行尾追加到下一行

d  删除整行

s

3).awk

语法格式

awk 选项 命令  文件名

选项:

-F  分隔符        修改默认分隔符

-v 变量名        自定义变量

命令:

BEGIN{}      begin发生在行处理前(注意大写)

{}                行处理时,读一行执行一次

END{}                行处理后

默认以空格切割,cut默认是以单个空格,awk默认是连续的空格

内置变量:

FILENAME 显示文件名        NR:显示读到哪一行        NF:切割后有多少列

  FS  输入字段分隔符(默认空格)等同于-F           OFS        输出字段分隔符

OFS示例:

[root@localhost ~]# awk -F: '{print $1,$2,$3,$4}' /etc/passwd | head -1
root x 0 0
[root@localhost ~]# awk -F: 'BEGIN{FS=":";OFS="+++"}{print $1,$2,$3,$4}' /etc/passwd | head -1
root+++x+++0+++0

显示一个文件夹中空行的行号

awk '/^$/ {print NR}' /etc/sudoers

示例:打印系统上uid大于等于500且以m开头的行的首字段:

awk -F: '$3>=500 && /^n/ {print}' /etc/passwd

第三个字段有0的打印,和仅为0的,模糊匹配和精确匹配:

 awk -F: '$3~0 {print}' /etc/passwd

修改输出分隔符号,特殊字符需转义:

awk  -F: 'BEGIN{OFS="~~";}{print $1,$2}' /etc/passwd

4).grep

关键字搜索

grep 参数 文件/路径

-c 输出匹配行的内容

-i   忽视大小写

-r  递归搜索,及查找目录时用

-n  显示行号

-l 只显示文件名不显示内容

-w  匹配整词(精确查找)

练习

显示一个文件下的空行和非空行

grep -c ^$ /etc/nginx/nginx.conf

15

grep -c ^[^$] /etc/nginx/nginx.conf

-w的示例:

5).sort排序

不能指定分割符号

sort(选项)(参数)

选项:

-n        按照数值的大小排序

-r        相反的顺序排序

-t        设置排序所用的分隔符

-k        指定要排序的列

-t        指定分隔符

练习

 按照第三位逆序排序

sort -t : -rn -k3 sort1.sh

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值