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
算数运算
实现算数运算:
- let var=算术表达式 ,例 let var=x+y echo $var
- var= [ 算 术 表 达 式 ] , 例 v a r = [算术表达式] ,例 var= [算术表达式],例var=[x+y] echo $var
- var= ( ( 算 术 表 达 式 ) ) , 例 v a r = ((算术表达式)) ,例 var= ((算术表达式)),例var=((x+y)) echo $var
- var=$(expr arg1 arg2 arg3 …)
- declare –i var = 数值
- 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