Shell编程基础

Shell编程基础

一、Shell文件简介

Shell文件是一种包含一系列命令的文本文件,规范命名以.sh结尾,通常用于执行一系列操作或者运行一段脚本。Shell是一个命令行解释器,它允许用户通过键入文本命令与操作系统进行交互。
Shell文件第一行内容应该为#!\bin\bash
其它内容如

echo "helloworld"
touch test.txt
echo "你好" >> test.txt

运行Shell文件,有以下两种方法:

  1. 直接在命令行输入bash test.shsh test.sh,test.sh可以更改为绝对路径
  2. 修改执行权限,使得./test.sh也能够运行

二、变量

系统变量

常见的系统变量有以下,使用echo $HOME可以显示:

$HOME显示当前用户的家目录
$PWD显示当前路径
$SHELL显示默认的解析器
$USER显示当前文件的所属用户

自定义变量

一般变量

不需要定义变量类型,直接在命令行输入A=2就可以定义一个变量A,注意=左右不能有空格。使用echo $A可以输出变量A的值,使用unset A可以删除变量。自定义变量全部都是字符串类型,不能进行逻辑运算,比如语句C=2+3,C并不会等于5,而是等于2+3字符串。
声明有空格的字符串变量时,需要用双引号将字符串括起来,如D="i am fine"

静态变量

在命令行使用语句readonly B=1可以声明一个静态变量B,也可以叫只读变量,不能使用unset删除。

全局环境变量

在命令行输入语句export B=5可以定义一个全局环境变量,该变量可以给所有的Shell文件使用。全局环境变量也不可以被```unset``删除,只能在操作系统重启时被删除。

特殊变量

$nn为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,10和10以上的参数需要用大括号包含,如${10}
$#获取所有输入参数的个数,注意是参数,不包括下标为0的,也就是不包括脚本名称
$*代表命令行中所有的参数,$*把所有参数看成一个整体
$@代表命令行中所有的参数,不过$@把每个参数区分对待
$?最后一次执行命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行。

三、运算符

基本语法有两种:

  1. $((运算表达式))$[运算表达式]
  2. expr 运算表达式expr运算符间必须有空格
    举例:
expr 3 + 2

expr `expr 3 + 2` * 5

s=$((2+3-1))
echo $s

p=$[2+5*6]
echo $p

四、条件判断

基本语法[ condition ]condition前后要有空格),条件非空即为true,[]返回false。

常用判断条件

(1) 两个整数之间比较

==字符串比较
-lt小于(less than)
-le小于等于(less equal)
-eq等于(equal)
-gt大于(greater than)
-ge大于等于
-ne不等于(not equal)

(2)按照文件权限进行判断

-r有读的权限(read)
-w有写的权限(write)
-x有执行的权限(execute)

(3) 按照文件类型进行判断

-f文件存在并且是一个常规的文件(file)
-e文件存在(existence)
-d文件存在并是一个目录(directory)

运行例子:

[ 23 -ge 20 ]
echo $?

[ -w helloworld.sh ]
echo $?

[ -e /home/yuqing/test.sh ]
echo $?

[ 23 -ge 20 ]&&[ 15 -le 20 ]
echo $?

[23 -ge 20]&&echo ok

五、流程控制(重点)

1. if基本语法:

if [ 条件判断式 ];then
	程序
fi

if [ 条件判断式 ]
	then
		程序
fi

例子:

#!/bin/bash
if [ $1 -eq 1 ];then
        echo "input:1"
elif [ $1 -eq 2 ];then
        echo "input:2"
fi

2.case基本语法

case $变量名 in
"值1")
	程序1
	;;
"值2")
	程序2
	;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

例子:

#!/bin/bas
case $1 in
1)
        echo "input:1"
;;

2)
        echo "input:2"
;;
*)
        echo "other"
;;
esac

3.for循环

基本语法:

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

for 变量 in 值1 值2 值3
	do
		程序
	done

例子:

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


#!/bin/bash
s=0
for i in $1 $2 $3
do
        s=$[$s+$i]
done
echo $s

4.while循环

基本语法

while [ 条件判断式 ]
do
程序
done

例子

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

六、read读取控制台输入

基本语法:read(选项)(参数)
选项:

-p指定读取值时的提示符
-t指定读取值时等待的时间(秒)

参数:变量:指定读取值的变量名
例子:

#!/bin/bash
read -t 7 -p "input your name:" NAME
echo $NAME

七、函数

系统函数

basename [string/pathname] [suffix]
功能描述:basename命令会删掉所有前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

basename `pwd`

basename `pwd` .txt

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

dirname `pwd`
自定义函数

基本语法:

function funname()
{
	Action;
	[return int;]
}
funname

注意事项:

  1. 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行,不会像其它语言一样先编译。
  2. 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运算结果作为返回值。return后跟数值n(0-255)

例子:

#!/bin/bash
function sum()
{
        s=0
        s=$[$1+$2]
        echo $s

}
read -p "input your paratemer1:" p1
read -p "input your paratemer2:" p2

sum $p1 $p2

八、Shell工具(重点)

1、cut

cut的工作就是“剪”,具体来说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符、字段输出。
基本语法:
cut [选项参数] filename默认分隔符是制表符
选项参数

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列

例子:

 cut -d ' ' -f 1 data.txt

 cut -d ' ' -f 2,3 data.txt

2、sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。
基本语法:
sed [选项参数] 'command' filename
选项参数

选项参数功能
-e直接在指令列模式上进行sed的动作编辑

命令功能描述

命令功能描述
a新增,a的后面可以接字串,在下一行出现
d删除
s查找并替换

例子:

sed "2a somrthing important" data.txt
cat data.txt

3、awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
基本语法
awk [选项参数] 'pattern1{action1} pattern2{action2}...' filename
pattern:表示awk在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数

选项参数功能
-F指定输入文件折分隔符
-v赋值一个用户定义变量
例子
#!/bin/bash
awk -F : '/^root/ {print $7}' passwd

#"/^root/"中'^'表示行的开头
#{print $7}表示打印第七列

4、sort

sort命令在Linux里非常有用,它将文件进行排序,并将排序结果标准输出
sort [选项] (参数)

参数描述
-n依照数值大小排序
-r以相反的顺序来排序
-t设置排序时所用的分隔字符
-k指定需要排序的列

例子

#!/bin/bash
sort -t : -nrk 2 data.txt
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值