百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

一文搞懂shell脚本 shell脚本干啥的

liuian 2024-12-16 14:46 200 浏览

一文搞懂shell脚本

1 、shell脚本介绍

  • 什么是shell脚本

一系列的shell命令的集合, 还可以加入一些逻辑操作(if else for) 将这些命令放入一个文件中.

  • 什么是shell命令?
  • ls
  • pwd
  • cd
  • chmod +x test.sh
  • shell脚本的基本格式
    • 命名格式
      • 一般命名规则 : xxxxx.sh (建议以.sh为后缀命名)
    • 书写格式
# test.sh #是shell脚本中的注释
# 第一行如果忘了了写, 使用默认的命令解析器 /bin/sh
#!/bin/bash # 指定解析shell脚本的时候使用的命令解析器 /bin/sh也可以
# 一系列的shell命令
ls
pwd
cp 
rm
  • shell脚本的执行
# 执行shell脚本
./xxx.sh
sh test.sh

2、 shell脚本中的变量

  • 普通变量(本地变量)
# 定义变量, 定义完成, 必须要赋值, =前后不能有空格
temp=666
# 普通变量只能在当前进程中使用
  • 环境变量——一般大写
# 可以理解问全局变量, 在当前操作系统中可以全局访问
# 分类
 - 系统自带的
 - PWD
 - SHELL
 - PATH
 - HOME
 - 用户自定义的
 - 将普通变量提升为系统级别的环境变量
 GOPATH=/home/zoro/go/src - > 普通环境变量
 set GOPATH=/home/zoro/go/src - > 系统环境变量
 export GOPATH=/home/zoro/go/src
 ~/.bashrc
  • 位置变量
  • 执行脚本的时候, 可以给脚本传递参数, 在脚本内部接收这些参数, 需要使用位置变量
# 已经存在的脚本test.sh
#!/bin/bash
echo "hello , world, $0"
echo "第一个参数: $1"
echo "第2参数: $2"
echo "第3个参数: $3"
echo "第4个参数: $4"
echo "第5个参数: $5"
echo "第6个参数: $6"
# 执行test.sh
$ ./test.sh 11 22 3 4 5 6 aa bb
hello , world, ./test.sh
第一个参数: 11
第2参数: 22
第3个参数: 3
第4个参数: 4
第5个参数: 5
第6个参数: 6
  • 特殊变量
    • $#: 获取传递的参数的个数
    • $@: 给脚本传递的所有的参数
    • $?: 脚本执行完成之后的状态, 失败>0 or 成功=0
    • $: 脚本进程执行之后对应的进程ID
# test.sh
#!/bin/bash
echo "hello , world, $0"
echo "第一个参数: $1"
echo "第2参数: $2"
echo "第3个参数: $3"
echo "第4个参数: $4"
echo "第5个参数: $5"
echo "第6个参数: $6"
echo "传递的参数个数: $#"
echo "传递的所有的参数: $@"
echo "当前脚本的进程ID: $" 

$ ./test.sh aa bb cc dd ee ff 8 9 0 
    hello , world, ./test.sh
    第一个参数: aa
    第2参数: bb
    第3个参数: cc
    第4个参数: dd
    第5个参数: ee
    第6个参数: ff
    传递的参数个数: 9
    传递的所有的参数: aa bb cc dd ee ff 8 9 0
    当前脚本的进程ID: 47946
# 脚本执行状态查看
$ echo $?
0 -> 成功
非0 -> 失败
  • 普通变量取值
# 变量定义
value=123   # 默认以字符串处理
value1 = "123 456"
echo $value
# 如何取变量的值:
 - $变量名
 - ${变量名}
  • 取命令执行之后的结果值
# 取值的两种方式:
var=$(shell命令)
var=`shell命令`
  • 引号的使用
# 双引号
echo "当前文件: $var"
- 打印的时候会将var中的值取出并输出
# 单引号
echo '当前文件: $var'
- 将字符串原样输出

3 、条件判断和循环

  • shell脚本中的if条件判断
# if语句
# 注意事项:
 - if 和 []直接有一个空格
 - [ 条件 ] : 条件的前后都有空格
 - else if => elif
 - 
if [ 条件判断 ];then
 逻辑处理 -> shell命令
 xxx
 xxxx
 xxxx
fi
# ===================
if [ 条件判断 ]
then
 逻辑处理 -> shell命令
 xxx
 xxx
fi
# if ... elif .. fi
if [ 条件判断 ];then
 逻辑处理 -> shell命令
 xxx
 xxxx
 xxxx
elif [ 条件判断 ];then
 shell命令
elif [ 条件判断 ];then
 shell命令
elif [ 条件判断 ];then
 shell命令
else
 shell命令
fi

//-------------------------------------------------------------------------------
# if.sh
#!/bin/bash
# 需要对传递到脚本内部的文件名做判断
if [ -d $1 ];then
 echo "$1 是一个目录!" 
elif [ -s $1 ];then
 echo "$1 是一个文件, 并文件不为空"
else
 echo "$1 不是目录, 有可能不存在, 或文件大小为0"
fi
    • shell脚本for循环
# shell中的循环 for/ while
# 语法: for 变量 in 集合; do;done
for var in 集合;do
 shell命令
done# for.sh
#!/bin/bash
# 对当前目录下的文件进行遍历
list=`ls`
for var in $list;do
 echo "当前文件: $var"
 echo '当前文件: $var' 
done

4、shell脚本中的函数

# 没有函数修饰, 没有参数, 没有返回值
# 格式
funcName(){
    # 得到第一个参数
    arg1=$1
    # 得到第2个参数
    arg2=$2
    函数体 -> shell命令 + 逻辑循环和判断
    mkdir /root/abc
}
# 没有参数列表, 但是可以传参
# 函数调用
funcName aa bb cc dd
# 函数调用之后的状态: 
0 -> 调用成功
非0 -> 失败
#!/bin/bash
# 判断传递进行来的文件名是不是目录, 如果不是, 创建...
# 定义函数
is_directory()
{
    # 得到文件名, 通过参数得到文件名
    name=$1
    if [ -d $name ];then
        echo "$name 是一个目录!"
    else
        # 创建目录
        mkdir $name
        if [ 0 -ne $? ];then
            echo "目录创建失败..."
            exit
        fi  
        echo "目录创建成功!!!"                                                                                         
    fi  
}

# 函数调用
is_directory $1



相关推荐

安装系统教程win10(安装系统教程win7)

正确安装win10系统的步骤如下:1.确认电脑是否满足win10系统的最低配置要求,如CPU、内存、硬盘空间等。2.下载win10系统镜像文件,可以通过微软官网或第三方下载网站获取。3.制作U盘...

pps影音手机版下载官网(pps影音百科)

区别:1,爱奇艺主打网页播放,PPS主打客户端播放器;2,爱奇艺视频正版高清,PPS不全是高清,有部分盗版;3,爱奇艺在线播放比较好,PPS的P2P加载技术打开视频较快。1、爱奇艺PPS影音其实是爱...

百度官方下载安装免费(百度官网免费下载)

你好!有两种方法可以免费下载!第一:加入百度文库VIP看百度文库的说明,只要加入百度文库的VIP即可免费下载,不过不推荐这种还是需要花钱的方式第二:下载冰点下载器那这种方法该如何免费下载呢?下面我详细...

windows10更新文件在哪里(win10系统更新文件在哪个文件夹)
windows10更新文件在哪里(win10系统更新文件在哪个文件夹)

win10自动更新下载的文件位于C:\Windows\SoftwareDistribution\Download文件夹中。当然我们要找到哪个文件夹确切到哪个补丁并不是那么容易的,因为命名的文件夹都是长长的一段代号,一般我们要删除更新文件的...

2026-01-02 03:55 liuian

扫描仪怎么安装(信鸽扫描仪怎么安装)

扫描仪的安装步骤可能会略有不同,具体取决于您所使用的扫描仪品牌和型号。一般而言,您可以按照以下基本步骤来安装扫描仪:确认您的计算机系统符合扫描仪的最低系统要求。在计算机上插入扫描仪的安装光盘,或从制造...

u盘怎么启动重装系统(u盘启动重装系统哪个好)

1.下载好系统之家U盘以后在电脑上插入U盘并打开软件,软件会自,动配置用户的电脑信息,点击制作U盘启动盘。2.接着就进入了选择系统的界面,在这里选择需要安装的系统版本,然后点击开始制作。3.弹出提示窗...

photoshopcs6哪一年的(pscs6版本好用吗)

pscs6的发行时间是2012年4月24日,该软件是是AdobePhotoshop的第13代,具有多种功能,包括内容识别修补、Mercury图形引擎/3D性能提升/3D控制功能/改良的设计工具/全新的...

电脑如何设置自动关机win10(win10系统电脑怎么设置自动关机)

windows10自动关机设置方法如下1、打开电脑管家主界面,点击右下角的“工具箱”;2、在工具箱的其他分类中选择打开“健康小助手”;3、健康小助手中有三项功能,护眼配色、定时休息和定时关机,点击定时...

wan口未连接是欠费吗(wan口未连接是怎么回事)

网费欠费了路由器WAN指示灯常亮不闪烁,一个灯亮。路由器正常工作的话,电源指示灯是常亮状态,SYS系统指示灯和WAN指示灯会闪亮,尤其是WAN指示灯的状态有些复杂:如果WAN指示灯不亮,说明网络连接有...

如何用手机修复sd卡(如何用手机修复sd卡受损)

第一步:将要修复的内存卡,用读卡器连接到电脑上,然后下载失易得数据恢复软件。    第二步:运行软件,选择要恢复的“u盘/储存卡”功能。注:在恢复数据之...

惠普台式机bios设置(惠普台式机bios设置核显内存)

1、按电源键启动电脑,在屏幕刚亮时,不停点击F10按键,就可以进入BIOS界面;2、如果F10没反应,则在启动时不停点击ESC键;3、这个时候会进入到启动菜单选项,F10BIOSSetup就是BI...

搜狗输入法不见了怎么调出来

因为在设置里勾选了智能ABC风格,所以他会像智能ABC一样,按空格才会显示。右键点击搜狗皮肤,设置属性,勾选搜狗风格就好了。注意,当你勾选智能ABC风格的时候会自动勾选“按空格出字”。使用【ctrl...

类似系统的黑科技网吧(系统的黑科技网吧好看吗)

如果机器配置和装修都不追求高档的话应该差不多只要不是全部追求顶配基本上可以

输入法哪个好用占内存又小(哪种输入法占内存小)

最不占内存的是系统自带的输入法,不过只适合win8用户,对于win7和xp用户推荐qq输入法,不推荐搜狗(1,安装包就可以看出占用系统大小,2,各种后台运行,3,各种广告提醒),除了qq推荐谷歌输入法...

2025组装机推荐配置(21年装机配置)

1.CPU:Intel酷睿i5-10400F;2.主板:华硕H410M-K;3.内存:金士顿16GBDDR42666MHz;4.硬盘:希捷Barracuda1TB7200转;5.显卡...