shelll热身

热身

为什么使用shell

作为一个从事嵌入式行业的开发人员,每天要打交道的就是和Linuxshell串口,更准却的来说是bash shell,很多人刚从windows的界面操作转到Linux上来时,对看到Linux这个弹出来的控制窗口,多少有点不知所措,甚至有点茫然。

书读了一本又一本,博客写了一篇又一篇,可能是因为从事行业的性质决定的,也可能是因为自己总是爱学习点新鲜的工具导致。虽学了各种语言各种库,但是回过头来看这些学过的知识,仅存在自己的脑海中,平时工作生活中能用到的可能百分之20都不到,这也许就是进店的二八理论吧-你学的知识只有百分之二十是能够用到的,反过来当你学会使用一个工具的百分之二十的功能时,你就能够熟练的使用它,让我们带着这种二八理论来一起学会使用bash shell的百分之二十的使用方式吧。

shell是什么,你可以说shell是一个程序、一个命令解析器、一个介于用户和操作系统之间的绝缘层,一种计算机语言、一种脚本语言… ,这些答案都是对的,至于那些权威的官方解析,大家可以自行进行百度,会这查看wiki解释,在linuxshell能够将系统调用、公共程序、工具、编译的二进制文件粘合在一起来建立应用,如果你是在linux上从事开发工作,建议你学好shell,熟练掌握shell之后,你根本不需要那些华而不实成熟紧凑的程序。

带着一个Sha-Bang出发(Sha-Bang是指#!)

shell脚本就是一堆系统命令列在一个文件中,因此它可以帮助你少敲一些命令。

写一个脚本

ls
pwd
ifconfig

脚本写好之后,将其保存为example.sh1,执行可以直接调用bash来执行这个脚本,或者加上可执行权限之后在直接执行对应的文件,

  1. 使用bash执行
bash example1.sh
  1. 加上可执行权限执行
chmod 666 example1.sh
./example1.sh

当然你可以更加细化的添加权限的管理

比如:

chmod 555 scriptname (允许任何人都具有可读和执行权限) 
chmod +rx scriptname (允许任何人都具有可读和执行权限)

或者

chmod u+rx scriptname

1️⃣

实现一个清除文件内筒的脚本:

echo "cat example"
cat /dev/null > messages
echo "file is cleanup"
exit

该脚本实现了,将当前文件夹下的messages文件中的内筒清空,

echo是打印命令

/dev/null/ 在类UNIX系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF
在程序员行话,尤其是UNIX行话中,/dev/null被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

改进一下

执行脚本:

bash cat_example2.sh filename
#! /bin/bash
echo "cat cleanup example2"

# 确保输入文件名,否则退出
if test $# != 1 ; then
    echo "请输入要清除文件内容的文件名"
    # 脚本退出返回的值,可通过 echo $? 查看
    exit 1
fi

FILE_NAME=$1
cat /dev/null > ${FILE_NAME}

echo "file is cleanup"
exit #这是一个退出命令

对你没有看错,你在shell中能向其他语言脚本一样使用判断条件,改进之后的脚本用户可以指定要清除内容的文件名,并且当检测不到文件名输入的时候脚本会报错退出并返回1

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

要注意,在每个脚本的开头都使用 sha-bang(#!), 这意味着告诉你的系统这个文件的执行需要指定一个解释器. #! 实际上是一个2字节的魔法数字, 这是指定一个文件类型的特殊标记, 换句话说,在这种情况下, 指的就是一个可执行的脚本(键入 man magic 来获得关于这个迷人话题的更多详细信息)。
sha-bang之后接着是一个路径名. 这个路径名就是解释脚本中命令的解释程序所在的路径, 可能是一个shell, 也可能是一个程序语言, 也可能是一个工具包中的命令程序. 这个解释程序从头开始解释并且执行脚本中的命令(从 sha-bang行下边的一行开始)。

当然#!也可以被忽略, 不过这样你的脚本文件就只能是一些命令的集合, 不能够使用shell内建的指令了。再次提醒你 #!/bin/sh将会调用默认的shell解释器, 在Linux机器上默认是 /bin/bash .

1 #!/bin/sh
2 #!/bin/bash
3 #!/usr/bin/perl
4 #!/usr/bin/tcl
5 #!/bin/sed -f
6 #!/usr/awk -f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Achou.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值