目录:
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