shell脚本编写简单入门

本文是Shell脚本的初学者指南,涵盖了从编写Hello World程序到掌握变量、运算符、流程控制和函数的基础知识。了解如何设置解释器、赋值变量、进行算术和测试运算,以及如何利用不同类型的循环和函数来控制脚本流程。此外,文章还强调了Shell脚本的编写规范和调试技巧。
摘要由CSDN通过智能技术生成

初试入门

入门 helloword.sh 程序

使用编辑器vim 创建并添加语句

vim helloworld.sh
#! /bin/bash
echo 'helloworld'

#! /bin/bash 是指此脚本使用/bin/bash来解释执行。
echo 输出语句

chmod ug+x helloworld.sh		# 修改文件执行权限
./helloworld.sh			# 执行脚本

执行结果
在这里插入图片描述

运行shell脚本的四种方式

  1. 绝对路径
    权限:
    1、当前用户对沿途的文件卖都有x权限
    2、当的用户对目标文件应该有rx权限

    用法:绝对路径即可

  2. 相对路径
    权限:

    1. 当前用户对沿途的文件夹都有x权限
    2. 当前用户对目标文件应该有rx权限

    用法:必须加上./作为前缀

  3. 加上解释器作为前缀;
    权限:

    1. 当前用户对沿途的文件夹都有x权限
    2. 当前用户对目标文件应该有r权限

    用法:

    • bash 文件路径〔绝对路径、相对路径)
    • sh 文件路径〔绝对路径、相对路径)
  4. 用source命令执行或者在路径前加.空格作为前缀
    权限:

    1. 当前用户对沿途的文件夹都有x权限
    2. 当前用户对目标文件应该有r权限

    用法:

    • source 文件路径 (绝对路径、相对路径)
    • . 文件珞径 (绝对路径、相对路径)

方式1、2、3都是开启一个子bash进程,然后在子进程里运行的shell程序
方式4是直接在当前bash进程里运行的shell程序
进程之间变量不能相互调用,线程是独立的

注释

# 前面加 # 这就是注释
echo 'helloworld'	# 也可以在语句后面加注释
# name=123		#也可以注释掉语句

调试功能

-x 就是调试功能

sh -x /a/b/1.sh

-vx 一箩筐显示功能,+ 号是可调式代码

sh -x /a/b/1.sh

.sh文件里 使用 set -xset +x 部分调试代码

#XXXX
#XXXX
#XXXX
set -x
echo 111
set +x
echo 222
echo 3333
sh -x /a/b/1.sh

在这里插入图片描述

shell编写规范与建议

一、脚本编写规范

  1. 脚本存放目录需要统一
  2. shell脚本的结尾以.sh
  3. 脚本开头要有解释器如#!/bin/bash 或者#!/usr/bin/env bash
  4. 脚本开头注意加时间、作者、联系邮箱、脚本作用等信息
    # Author egon 2020-8-30version 1 des: xXXXX
    
  5. 关键代码应该用#号加上注释

二、代码编写好习惯

  1. 成对的符号尽量一次性写出来,防止遗漏
    例如大括号{},中括号[ ],小括号(),单引号'',双引号"",反引号``等
    
  2. 括号的保留空格习惯
    中括号 [  ] 两端需要留有空格,不然会报错。书写时即可留出空格然后书写内容。
    如果不知道大括号 { } ,中括号 [ ] ,小括号 ( ) ,到底哪种括号需要两端留空格,可以在书写这些括号的时候两端都保留空格来进行书写,这样可以有效避免因空格导致的各种错误。
    
  3. 流程控制语句一次性书写完再添加内容
    例1:if语句格式一次书写完成
    
    if 条件内容
    then
    	条件成立后执行的代码
    fi
    

变量

变量

一、变量介绍

什么是变量?
变:事物的状态是会发生变化的
量:记录事物的状态

变量是一种存取内存的机制

为何要用变量?
是为了让计算机具备人的某项技能

二、变量的使用

  1. 先定义、后引用
    先定义age=18后引用echo $age
  2. 删除变量
    删除变量unset age

补充:字符连接

money=1000
echo ${money}RMB

三、变量的三大组成部分

变量名 赋值号

  • 变量名的命名规范
    • 前提:变量名的命名必须见名知意
    • 规范:
      1. 变量名是由字母数字下划线组成
      2. 不能以数字开头
      3. 不能使用shell的关键字
      4. 不要使用中文的变量名
  • 变量值的三种来源三预定变量
    • 直接赋值
      ip="10.0.0.11"
      age=18
      now_date1=`date "+%F"`
      now_date2=$(date "+%F")
      
    • 从脚本的参数获取,即从命令获取
      $0 是本身
      $1 是第一个参数
      $2 是第二个参数
      ...
      ${10} 10以上就要用{}括起来
      
      创建.sh脚本nginx.sh
      #! /bin/bash
      if [ $1 = "start" ];then
              echo "nginx is starting..."
      elif [ $1 = "stop" ];then
              echo "nginx is stopping"
      elif [ $1 = "restart" ];then
              echo "nginx is restartting"
      else
              echo "Usage: ./nginx.sh start:stop:restart"
      fi
      
      运行
       chmod +x nginx.sh			# 设置权限
       ./nginx.sh stop 				# stop 是传入的变量
      
    • 与用户交互来获取变量值,即通过键盘输入来获取
      read -p "请输入您的账号:" name
      登录案例
      db_name="egon"
      db_pwd="123"
      
      read -p "请输入您的账号:" inp_name
      read -p "请输入您的密码:" inp_pwd
      
      if [ $inp_name = $db_name ] && [ $inp_pwd = $db_pwd ]:then
              echo "登录成功"
      else
              echo "登录失败"
      fi
      
      运行
      chmod +x login.sh
       ./login.sh
      请输入您的账号:egon
      请输入您的密码:123
      登录成功
      

与用户交互

接收用户输入:read命令
把程序的处理结果反馈给用户:
	echo命令格式化输出
		user="egon"
		age=18
		echo "my name is $user my age is $age"
	
	printf命令的格式化输出
		printf "my name is %s, my age is %s\n" "egon" 18			#直接传入
		
		x="egon"
		y=18
		printf "my name is %s, my age is %s\n" $x $y		#变量传入

		%s 字符串、%d整型、%f浮点数
		%f浮点数		" %.2f "显示后两位小数		" %8.2f "显示整数8位,小数2位

预定义变量

$*		# 获取所有的位置参数
$@		# 获取所有的位置参数

$# 		# 获取所有的位置参数个数
$$		# 获取当前shell进程的pid

$?		# 获取上一条命令运行状态,0代表成功  非0代表失败

四、常量

常量:不变的量

readonly m=111		# 使用常量关键字
AGE=18				# 或者使用大写变量名来提示自己这是常量

基本数据类型与值操作

二、基本数据类型
整型:年龄、个数、号码

age=10
level=3

浮点型:薪资、身高、体重

salary=3.3
height=1.81

字符串类型:名字、国籍、名人名言、ip地址等描述性质的内容

msg="hello"
msg='hello'		# 硬引用,包含的字符均无特殊意义

sheil是一门角解释型的、弱类型

x=1
y="100"
expr $x + $y  #结果 101 ,expr 运算

数组类型:

  1. 普通数组
    # 直接赋值
    hobbies=("抽烟" "酒" "烫头")
    echo ${hobbies[0]}		# 结果:抽烟
    echo ${hobbies[1]}		# 结果:酒
    echo ${hobbies[2]}		# 结果:烫头
    
    # 先创建后赋值
    declare -a array1
    array1[0]=12
    array1[1]=34
    array1[2]=56
    echo ${array1[0]}		# 结果:12
    echo ${array1[1]}		# 结果:34
    echo ${array1[2]}		# 结果:56
    
    # 指定下标对应为什么值
    array2=([2]=3.3 [1]=1.1 [3]=4.4)
    echo ${array2
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值