文章目录- 保存永久环境变量
- 常量
- 位置变量
- ln -s 源文件 连接文件
- ls |wc -l
- pidof
- shift
- $?
- pstree -p
- f1.sh
- bash中的算术运算
- bash随机数生成器
- 随机打印字体颜色
- 短路与&& 短路或||
- a b 通过异或交换值
- 习题
- 编写脚本,统计/etc/passwd第10个用户和第20个用户的id的和
- 比较
- 如果磁盘空间大于80% 给出提示信息
- ln -s 源文件 连接文件
- ls |wc -l
- pidof
- shift
- $?
- pstree -p
- f1.sh
- bash中的算术运算
- bash随机数生成器
- 随机打印字体颜色
- 短路与&& 短路或||
- a b 通过异或交换值
- 编写脚本,统计/etc/passwd第10个用户和第20个用户的id的和
- 比较
- 如果磁盘空间大于80% 给出提示信息
保存永久环境变量
代码语言:javascript复制1.root用户:
在/etc/profile文件中添加变量【对所有用户生效(永久的)】
并执行以下代码
# source /etc/profile
2.普通用户:
在用户目录下的.bash_profile或者.bashrc文件中增加变量【对单一用户生效(永久的)】
export PS1="[e[1;32m]u@h[ 33[00m]:[ 33[01;34m]w[ 33[00m]$"
并执行以下代码
# source .bash_profile
3.短暂的环境变量:
直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
例如:export PATH=/usr/local/webserver/php/bin:$PATH
常量
代码语言:javascript复制1.声明只读常量,只能声明不能修改删除
readonly name
或
declare -r name
2.exit 退出当前进程,只读环境变量消失
3.查看只读变量
declare -r
或
readonly -p
>>> UID=“1000”常量不可修改
使用场景:
pi=3.14
需要设置成固定值的常量
{}
代码语言:javascript复制不开启shell,影响当前的环境
{ name=mage;echo $name; }
注意结尾也有;把命令当作一个整体去执行
位置变量
代码语言:javascript复制1. $1...$10表示执行脚本时后面跟的第几个参数/脚本内部函数的参数
1. test.sh a b c
2. foo(){
echo $1
echo $2
echo $3
}
foo a b c
2. $0 : 表示当前执行脚本命令
basename $0 :当前执行脚本的名称
3. 表示参数的个数
$#
4. 显示输入的所有的变量
1. $* 传递给脚本的所有参数,全部参数合为一个字符串
2. $@ 传递给脚本的所有参数,每个参数为独立的字符串;脚本嵌套脚本使用
区别 :
ex:
f1.sh
>echo "f1.sh arg is $*"
>f2.sh "$*"
f2.sh
>echo "f2.sh arg is $1"
运行:./f1.sh a b c
>#f1.sh arg is a b c
>#f2.sh arg is a b c
将$*换成$@时
>#f2.sh arg is a
5.set -- 清空所有的位置参数
ln -s 源文件 连接文件
代码语言:javascript复制arg.sh
>echo "script name is $0"
>ln -s arg.sh link.sh
>./link.sh
>#script name is link.sh
$0显示的是当前执行脚本的名称
不能将软连接再创建软连接
ls |wc -l
代码语言:javascript复制查看当前的文件夹的个数
pidof
代码语言:javascript复制查找指定进程的进程号
pidoff bash
shift
代码语言:javascript复制f1.sh
>echo "$1"
>echo "$2"
>echo "$3"
>shift 1
>echo "$1"
>echo "$2"
>echo "$3"
>#f1.sh 1 2 3
>echo "1"
>echo "2"
>echo "3"
>echo "2"
>echo "3"
将参数移除一个
shift num
移除多个参数
$?
代码语言:javascript复制保存最近一次的命令的执行状态(显示上一次执行命令的状态)
0:成功 1-255:失败
f1.sh f2.sh
>ls >hostnam
>hostnam >ls
>#f1.sh
>#echo $?
127 执行脚本时最后一条指令未执行成功就不会显示0
或
中间有语法错误
>#f2.sh
>#echo $?
0 最后一条指令执行成功,中间可能有未执行的指令,但中间没有语法错误
f3.sh
>ls
>exit 10 :指定运行脚本结束时的状态 例:退出时的数据是10
>#f3.sh
>#echo $?
>>>10
z
pstree -p
代码语言:javascript复制查看进程树
f1.sh
代码语言:javascript复制#! /bin/bash
echo "name=$name"
代码语言:javascript复制显示进程树
----bash----f1.sh
f1.sh为bash的子进程,局部变量间的父子变量不可相互影响 不可相互传递
>name=haha
>./f1.sh
># name=
>export name
>./f1.sh
># name=haha
bash中的算术运算
代码语言:javascript复制>x=1
>y=2
>let z=x y
>echo z
>>>3
1.let var=x y
2.$[数字运算] : 中括号支持数据运算
3.$((数字运算))
4.echo '算术表达式'|bc
5.var=$(expr $1 $2 ..)
注意:
中间有空格
乘法要转译*
6.declare -i x=10
>declare -i x=10
>declare -i y=20
>declare -i z=x y
直接声明数值
bash随机数生成器
代码语言:javascript复制RANDOM (0-32767)
[RANDOM%6] : 得到的是[0-5]的整数
[RANDOM%6 31] : 得到的是[0-37]的整数
> echo $[RANDOM%6]
>3 : 产生一个0-5的随机数
随机打印字体颜色
代码语言:javascript复制31-37
$COLOR=$[RANDOM%7 31];echo -e "