首页 > 系统相关 >已整理-shell脚本编程资料整理

已整理-shell脚本编程资料整理

时间:2022-10-18 10:15:08浏览次数:44  
标签:脚本 shell 变量 命令 编程 echo 序列 整理 bash

  目录:

    1、变量的定义与类型

    2、配置用户环境

    3、shell的整数运算

    4、条件测试

    5、if条件分支

    6、循环

    7、case分支

    8、函数

    9、流程控制语句

  

1、变量的定义与类型
变量:为了适应多变的环境需求,会变化的量,以不变的名称存储可以变化的值,类似容器

定义变量:a=100
提取变量值:echo $a
销毁变量:unset a

为了和户的体验,降低脚本的使用难度,产生交互,向脚本中传递命令行参数:
read -p 'please input your create username:' username
-p 输出屏幕提示信息
1)、产生交互;   2)、记录用户在键盘输入;   3)、将记录的信息赋值给一个变量储存;

1.1 变量的种类:
【环境变量】: 变量名一般都大写,用来设置用户/系统环境;
【位置变量】: bash内置,存储执行脚本时提供的命令参数;
【预定义变量】:bash内置,可直接调用的特殊值,不能直接修改;
【自定义变量】: 用户自主设置、修改及使用;

环境变量:由系统定义,并且赋值完成,一般变量名为大写;
常见的环境变量:
PWD / PATH / USER / LOGNAME / SHELL / HOME

USER=当前登陆有用户

env 显示所有环境变量
set 查看所有变量

自定义环境变量:
# export ada=100 #定义环境变量
# export -n ada #取消环境变量,恢复到普通变量


位置变量:由系统定义完成,在执行脚本时提供的命令行参数,表示为$n ,其中n为序号;
$1,$2,....${10},${11}....
$0 表示bash脚本文件名

预定义变量:用来保存脚本程序的执行信息,直接使用这些变量,不能直接为这些变量赋值;
$# ->已加载的位置变量的个数
$? ->程序退出后的状态值, 0表示正常,其它值表示异常

判断用户是否输入参数? 当$#的值为0的时候,说明没有输入参数;


自定义变量:根据变量的用途不同区分,用户自主设置、修改及使用;
a=100
unset a #取消自定义变量

以下是常用变量:

#! /bin/bash
echo $1     脚本后跟的第1个参数
echo $2     脚本后跟的第2个参数
echo $3     脚本后跟的第3个参数
echo $$     当前脚本的进程号
echo $#     位置变量的个数
echo $*     所有位置变量
echo $?     上一条指令的结果,0代表正常,非0是异常
echo $0     执行脚本的名字
echo $!     最后一条放入后台的程序进程号

 

stty -echo #关闭回显

stty echo #回显


1.2 取变量值
单引号:'' 取消原来的意义

反撇号:`` 与 $() 将命令的输出,当做参数直接参与下一个命令的运行


----------------------------------------------------------------------------------------------------------------------------------
2、配置用户环境
alias 别名
语法:
定义别名:alias 别名='程序路径'
取消别名:unalias 别名

~/.bashrc         指定用户每次开启bash 终端生效
/etc/bashrc        影响所有用户


# cat /etc/shells #查看系统拥用的解释器


---------------------------------------------------------------------------------------------------------------------------------
3、shell的整数运算
3.1、expr 1 + 3           #不支持小数,运算符前面都需要空格,否则运算不成功,如果是乘法需要用: \* 表示

# expr 1 + 3
4

 

3.2、echo $[]             #不支持小数,运算后,显示不了结果,需要配合echo

# echo $[100+20]

 

3.3、let               #不支持小数,也支持变量值的变化,不显示结果

# let a=a+100
# let a++
# let a+=2

 

3.4、echo "scale=3;10/3"|bc      #bc进行非交互式计算,支持小数


----------------------------------------------------------------------------------------------------------------
4、条件测试
4.1、字符串比较

==     是否相等
!=     是否不相等
-z     判断是否为空, 空为真,非空为假
-n      判断是否不为空,非空为真, 空为假

 

[ abc == abc ]
[ $USER == "root" ] && echo 'successful.'
[ $USER != "root" ] && echo 'successful.'

 

4.2、数字比较

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

 

4.3、文件状态判词

-e     判断文件是否存在,不区分文件种类,不管是文件还是目录
-f     判断文件是否存在,是文件为真
-d     判断文件目录是否存在,是目录为真

 

如果取反,前面加 ! -e 即可;

-r     判断文件是否有读权限 
-w      判断文件是否有写权限 
-x     判断文件是否有执行权限

 


4.4、逻辑判断

&&     前面任务成功,才执行后续任务
||     前面任务失败,才执行后续任务
;     前面任务执行完毕后,继续执行后面的命令

 

----------------------------------------------------------------------------------------------------------------
5、if条件分支
if双分支处理:
双分支,当条件满足/不满足时,分别xx/yy处理
如果软件包foo未装,则将其安装;
否则,放弃安装

语法:

if 条件测试; then
  命令序列xx
else 
  命令序列xx
fi

 

示例:
判断用户是否存在?

#! /bin/bash
id $1 &>/dev/null
if [ $? -eq 0 ]; then
  echo 'user is esxits'
else
  echo 'user is not esxits'
fi

 

if多分支
语法:

if 条件测试; then
  命令序列xx
elif 条件测试; then
  命令序列xx
else 
  命令序列xx
fi

 

示例:

#! /bin/bash

read -p 'please input your core:' core
if [ $core -ge 90 ]; then
  echo 'youxiu'
elif [ $core -ge 80 ]; then
  echo 'lianghao'
elif [ $core -ge 70 ]; then
  echo 'yiban'
elif [ $core -ge 60 ]; then
  echo 'jige'
else
  echo 'liangliang'
fi

 

-------------------------------------------------------------------------------------------------------------
6、循环
for循环:给定一批对象,反复执行类似的操作
语法:

for 变量名 in 值列表
do 
  命令序列
done

for i in {1..5}
do 
  echo $i
done

 

while 条件测试
do
  任务序列
done

while :            #永远执行任务
do
  任务序列
done

 

-----------------------------------------------------------------------------------------------------------
7、case分支
case分支,是简化版本的if,代码编写比if精简,但功能不如if强大;
语法:

case 变量 in
模式1)
  命令序列;;
模式2)
  命令序列;;
*)
  命令序列
esac

 

case $1 in
aa|a)
  echo aaaa;;
bb|b)
  echo bbbb;;
*)
  echo ccccc
esac

 

-----------------------------------------------------------------------------------------------------------
8、函数
函数可以定义公共的语句块,在脚本中反复调用,达到精简脚本的目的

函数定义语法:

function 函数名 {              #第1种定义语法

}

函数名(){                  #第2种定义语法

}

 

函数名 #调用

#!/bin/bash
start(){
  echo 'test'
  exit 100
}

start

 

----------------------------------------------------------------------------------------------------------
9、流程控制语句
wait        等待所有后台进程执行完毕,再执行后面的命令;

exit       终止脚本程序
break      跳出循环,执行循环后任务
continue     结束本次循环,继续下一次循环

 

标签:脚本,shell,变量,命令,编程,echo,序列,整理,bash
From: https://www.cnblogs.com/reachos/p/16801537.html

相关文章

  • Delphi TWebBrowser编程简述
       Delphi3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现的,而且需要自己引入,在其后的4.0和5.0中,它就在封装好shdocvw.dll之后作为Internet构件组之一......
  • mac上的类xshell的工具termius功能研究测试,附mac上安装brew并解压asar文件
    1.安装brew1.1nodejsbrew的安装目录在/usr/local/Cellar,我们以安装nodejs为例子,只需要执行:brewinstallnodejs1.2brew使用中科大源安装brew /usr/bin/ruby-e"$(......
  • 【汇编】最简单的汇编程序:实现清屏(.asm源码)
    项目环境编译环境:搭建一个nasm2.8的编译环境。镜像文件:采用winhex_18.2刷入编码。虚拟机:采用Bochs-2.4.5。项目软件傻瓜式环境配置。解压文件到D盘能直接使用。程序介绍汇编......
  • Shell图形化脚本基础
    脚本菜单创建菜单创建菜单函数functionmemu{clearechoecho-e"\t\tTHEFUNCTION\n"echo-e"\t1.FUNCTION1"......
  • 英语知识整理
    ABCDEFGHIJKLMNOPQRSTUVWXYZ......
  • 反射学习——Robyn编程学习(Java)
    反射为什么我们需要反射?因为反射就是通过找到一个类的CLASS对象,从而对该类的属性和方法进行操作,可以理解为使用了一个镜子来操控类。反射原理图反射优化类加载的过......
  • 【数据库】期末必知必会-----第十章 数据库编程
    第十章数据库编程1、MySQL编程基础(语法、系统函数等)要求了解,出现在单选、判断、多选中语法:1)字符串常量用单引号2)日期用单引号3)布尔值只有true和false4)null适用于各类字段,nu......
  • JavaGUI编程个人笔记
    GUI编程(了解)组件窗口弹窗面板文本框列表框按钮图片监听事件鼠标事件键盘事件破解工具简介Gui开发核心技术:SwingAWT界面不美观需要jre环境但还要学习......
  • shell jfrpg上传下载文件脚本
    目录shelljfrpg上传下载文件脚本重名名pull下拉脚本push推送脚本getandupload下拉修改后5秒上传shelljfrpg上传下载文件脚本重名名vim/root/.bashrcaliaspull=......
  • #yyds干货盘点# 常用 Shell 分析服务器日志命令2
    9、访问次数最多的10个文件或页面catlog_file|awk'{print$11}'|sort|uniq-c|sort-nr|head-10catlog_file|awk'{print$11}'|sort|uniq-c|sort-nr|head-20awk'......