Linux学习笔记(四)-bash基础特性
bash中的变量类型
根据变量的生效范围等标准:
本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进场,包括当前shell的子shell进场无效
环境变量:生效范围当前shell进程和子进程
局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
位置变量:$1,$2,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
特殊变量:$?,$0,$*,$#,$@
本地变量
变量赋值:name='value'
可以使用引用:
value:
(1)可以是直接字符;name="username"
(2)变量引用:name="$username"
(3)命令引用:name=COMMAND
,name=$(COMMAND)
变量引用:${name},$name
"":弱引用,其中的变量引用会被替换为变量值;
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串;
显示已定义的所有变量
set
销毁变量
unset name
环境变量
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:$name,${name}
显示所有环境变量:
export
env
printenv
销毁:
unset name
bash有许多内建的环境变量:PATH,SHELL,UID,HISISZE,HOME,PWD,OLD
变量命名法则:
1、不能使程序中的保留字,例如if ,for;
2、只能使用数字、字母及下划线,且不能一以数字开头
3、见名知义:驼峰命名法(尽量不要用大写字母)
只读变量:
readonly name
declare -r name
位置变量
在脚本代码中调用通过命令行传递给脚本参数
$1,$2,...:对应调用第1、第2等参数
$0:命令本身
$*:传递给脚本的所有参数
$@:传递给脚本的所有参数
$#:传递给脚本的参数的个数
实例:判段给出的文件的行数
#!/bin/bash
linecount="$(wc -1 $1| cut -d'' -f1)"
echo "$1 has $linecount line."
bash的配置文件
按生效范围划分,存在两类:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~./bashrc
按功能划分,存在两类:
profile类:为交互式登陆的shell提供配置
全局:/etc/profile,/ect/profile.d/*.sh
个人:~/.bash_profile
功用:
(1)用于定义环境变量
(2)运行命令或脚本
bashrc类:为非交互式登陆的shell提供配置
全局: /etc/bashrc
个人:~/.bashrc
功用:
(1)定义命令别名
(2)定义本地变量
shell登录
交互式登录
直接通过终端输入账号密码登录;
使用“su - UserName"或”su -l UserName"切换的用户
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc --> /etc/bashrc
非交互式登陆
su UserName
图型界面下打开的终端
执行脚本
~/.bashrc --> /etc/basgrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置的生效方式:
(1)重新启动shell进程
(2)使用source或.命令进程
bash中的算术运算
+,-,*,/,%,**,
实现算术运算:
(1)let var=算术表达式
(2)var=$[算术表达式]
(3)var=$((算术表达式))
(4)var=$(expr arg1 arg2 arg3 ...)
乘法符号有时候需要转义
bash有内建的随机数生成器:$RANDOM
增强型赋值:
+=,-=,*=,/=,%=
let varOPERvalue
例如:let count+=1
自增,自减:
let var+=1
let var++
let var-=1
let var--
练习(1)写一个脚本
计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3)
userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3)
useridsum=$[$userid1+userid2]
echo "uid sum:$useridsum"
练习(2)写一个脚本
传递两个文件路径作为参数给脚本,计算着两个文件中所有空白行之和
#!/bin/bash
spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l)
spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)
echo "the sum of space line:$[$spaceline1+$spaceline2]"
bash测试
条件测试:
判断某需求是否满足,需要由测试机制来实现
Note:专用的测试表达式需要由测试命令辅助完成测试过程
测试命令:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Note:EXPRESSION前后必须有空白字符:
bash的测试类型:
数值测试:
-gt:是否大于
-ge:是否大于等于
-eq:是否等于
-ne:是否不等于
-lt:是否小于
-le:是否小于等于
字符串测试:
==/=:是否等于
>:是否等于
<:是否小于
!=:是否等于
=~:左侧字符是否能够被右侧的PATTERN所匹配
Note:此表达式一般用于[[ ]]中
-z:”SIRING":测试字符串是否为空,空则为真,不空为假
-n:”SIRING":测试字符串是否不空,不空则为真,空则为假
Note:用于字符串比较式时的用到的操作数都应该使用引号;
文件测试
bash自定义退出码
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字,如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;
|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/21
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
作者:废权
链接:https://blog.yjscloud.com/archives/21
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
1
二维码

Linux学习笔记(四)-bash基础特性
bash中的变量类型
根据变量的生效范围等标准:
本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进场,包括当前shell的子shell进场无效
环境……

文章目录
关闭
共有 0 条评论