Shell编程基础

shell是什么

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

这里主要和 大家探讨Bash shell

Bash变量种类

局部变量

生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

变量赋值:name=value
变量引用:name="$USER"

命令引用:name=command 或 name=$(command)
" " 弱引用,其中的变量引用会被替代为变量值
’ ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
unset name 删除变量

环境变量

生效范围为当前shell进程及其子进程

变量声明:export name = value
变量赋值:declare -x name=value
变量删除:unset name
显示所有环境变量:env printenv export declare -x
只读变量:只能声明,但不能修改和删除

声明只读变量:readonly name 或 declare -r name
查看只读变量:readonly -p

本地变量

生效范围为当前shell进程中某代码片断,通常指函数

位置变量

$1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

$1, $2, … 对应第1、第2等参数,shift [n]换位置
$0 命令本身
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
$@, $* 只在被双引号包起来的时候才会有差异
set – 清空所有位置变量
$? 变量保存最近的命令退出状态
$-显示shell使用的当前选项,与set命令功能相同
$$bash运行的当前pid号, 你可以使用ps -A 看你自己shell 的pid

算数运算

实现算数运算:

  1. let var=算术表达式 ,例 let var=x+y echo $var
  2. var= [ 算 术 表 达 式 ] , 例 v a r = [算术表达式] ,例 var= []var=[x+y] echo $var
  3. var= ( ( 算 术 表 达 式 ) ) , 例 v a r = ((算术表达式)) ,例 var= (())var=((x+y)) echo $var
  4. var=$(expr arg1 arg2 arg3 …)
  5. declare –i var = 数值
  6. echo ‘算术表达式’ | bc

$RANDOM(0-32767) bash内建随机数生成器变量 echo [ [ [RANDOM%50] 生成0-49之间随机数

逻辑运算

true为1,false为0,&&为与,||为或,!为非
1&&1=1 1||1=1 !1=0
1&&0=0 1||0=1 !0=1
0&&1=0 0||1=1
0&&0=0 0||0=0

短路运算
短路与:

第一个命令为false,结果必定为false,第二个命令不用执行
第一个命令为ture,第二个命令才会执行

短路或:

第一个命令为false,第二个命令才会执行
第一个命令为ture,结果必定为ture,第二个命令不用执行

条件测试
判断某需求是否满足,需要由测试机制来实现
专用的测试表达式需要由测试命令辅助完成测试过程
测试命令:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符
[ “a” = “b” ] && echo eqal || echo ileqal

bash的数值比较

-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
[ 3 -gt 6 ] && echo ture || echo false

bash的字符比较

= 是否等于
ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配

注意: 此表达式一般用于[[ ]]中;扩展的正则表达式

-z "STRING“ 字符串是否为空,空为真,不空为假
-n "STRING“ 字符串是否不空,不空为真,空为假

注意:用于字符串比较时的用到的操作数都应该使用引号

组合测试实例:

[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab 判断/bin/cat是否是存在且为普通文件,并且是否有执行权限,如果都真,则打开/etc.fstab

read命令

功能:把输入值分配给一个或多个shell变量
read -p “enter a filename:” FILE 为FILE赋值
-p 指定要显示的提示
-s 静默输入,一般用于密码
-n N 指定输入的字符长度N
-d ‘字符’,输入结束符
-t N N为输入等待时间

bash的配置文件
按生效范围划分,存在两类:

全局配置

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

个人配置

~/.bash_profile
~/.bashrc

按功能划分,存在两类:profile类和bashrc类
1.profile类:为交互式登录的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh
个人:~/.bash_profile
功用:

(1) 用于定义环境变量
(2) 运行命令或脚本

2.bashrc类:为非交互式和交互式登录的shell提供配置

全局:/etc/bashrc
个人:~/.bashrc
功用:

(1) 定义命令别名和函数
(2) 运行本地变量

修改profile和bashrc文件后需生效
重启shell进程
或.source 例:.~/.bashrc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值