1.root用户:
在/etc/profile文件中添加变量【对所有用户生效(永久的)】
并执行以下代码
# source /etc/profile
2.普通用户:
在用户目录下的.bash_profile或者.bashrc文件中增加变量【对单一用户生效(永久的)】
export PS1="\[\e[1;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$"
并执行以下代码
# source .bash_profile
3.短暂的环境变量:
直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
例如:export PATH=/usr/local/webserver/php/bin:$PATH
1.声明只读常量,只能声明不能修改删除
readonly name
或
declare -r name
2.exit 退出当前进程,只读环境变量消失
3.查看只读变量
declare -r
或
readonly -p
>>> UID=“1000”常量不可修改
使用场景:
pi=3.14
需要设置成固定值的常量
{}
不开启shell,影响当前的环境
{ name=mage;echo $name; }
注意结尾也有;把命令当作一个整体去执行
1.表示执行脚本时后面跟的第几个参数
$1 $2 $3 ...${10}
2. 表示当前执行脚本的名称
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 -- 清空所有的位置参数
arg.sh
>echo "script name is $0"
>ln -s arg.sh link.sh
>./link.sh
>#script name is link.sh
$0显示的是当前执行脚本的名称
不能将软连接再创建软连接
查看当前的文件夹的个数
查找指定进程的进程号
pidoff bash
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
移除多个参数
保存最近一次的命令的执行状态(显示上一次执行命令的状态)
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
查看进程树
#! /bin/bash
echo "name=$name"
显示进程树
----bash----f1.sh
f1.sh为bash的子进程,局部变量间的父子变量不可相互影响 不可相互传递
>name=haha
>./f1.sh
># name=
>export name
>./f1.sh
># name=haha
>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
直接声明数值
RANDOM (0-32767)
[RANDOM%6] : 得到的是[0-5]的整数
[RANDOM%6+31] : 得到的是[0-37]的整数
> echo $[RANDOM%6]
>3 : 产生一个0-5的随机数
31-37
$COLOR=$[RANDOM%7+31];echo -e "\033[1;${COLOR}mcolor\033]0m]"
或
$COLOR=$[RANDOM%7+31];echo -e "\e[1;${COLOR}m color\e]0m]"
-q
grep -q
unzip -q
>echo $?
>0
-q不显示执行的结果
cmd1 && cmd2
如果cmd1为假则cmd2不执行
如果cmd1为真则cmd2执行
脱字符
>a=12
>b=14
> a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b
>14 12
第一个(异或)a保留的相当于中间值
UID=`head -10 /etc/passwd|tail -1|cut -d: -f3`
1.字符串比较
[ str 空格 = 空格 str ]
2.数字比较
[ num1 -eq num2 ]
df -h |grep "^/d[a-z]"|awk -F " " '{ print $5}'|sort -nr|head -n1|cut -d% -f1
1.取到数字
2.取到数字过大的那一行
3.取到文件夹的路径名称