shell中的变量
- shell元字符(目前发现除了{}外,创建文件(夹)没效果)
- *:匹配多个字符,eg : rm -rf *.txt,删除所有的txt文本
- ?: 匹配一个字符 ,eg : rm -rf ?.txt ,删除名字只含一个字符的文本
- [] : 匹配括号中任意一个,eg :rm -rf lov[abcd].txt,删除lova.txt , lovbtxt , lovc.txt , lovd.txt
- {} : 集合,eg :mkdir /root/{aa,bb,cc} , 在root目录下创建aa,bb,cc文件夹
- \ : 转义符,让元字符回归本意,eg : echo * 并不会输出*,echo \ * ,会输出*
- echo 的带色输出
- 文本和背景颜色同时设置:echo -e “\e[37;40m This is test\e[0m” ,
- 仅文本颜色格式:echo -e “\e[30m This is text.\e[0m” 其中30m可以替换31m,32m,…,37m,输出0m回复本色(可简写\e[0m)
- 字体背景颜色格式:echo -e “\e[40m This is text.\e[0m” 其中40m,可替换成41m,42m,…,47m,输出0m回复本色(可简写\e[0m)
- 颜色说明:“”之中的\e可用\033替换
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”
3.环境变量
每个脚本都是在不同的子shell中执行的,之间定义的变量不能相互访问,而环境变量可以
export 变量名 :声明一个变量为环境变量
env : 查看所有的环境变量
在一个脚本需要另一个脚本中的变量时,可以用source filename.sh或者.filename.sh(未成功)来加载(感觉就是执行了这个文件),不会建立新的子shell.
4.位置参数
在脚本运行时在其后加上一个或多个参数,用空格隔开,接受这些参数的变量不需要自己创建,依次赋给$1,$2,$3,$4,$5,…
输出所有参数:echo "所有的参数:$* "
输出所有参数:echo "所有的参数:$@ "
输出参数的个数:echo "参数个数:$# "
输出当前的进程id : echo "PID : $$ "
$0 : 返回运行该脚本时输入的命令,可以用命令basename $0 得到脚本的名字,dirname $0 得到脚本的路径
5.变量的赋值方式
1.显式赋值
ip=192.168.1…1 等号两边不能存在空格
time=`date +%F`
time=$(date +%F) ,和上一个效果一样
2.用read从键盘中录入
read 变量名
read -p “提示内容” 变量名
read -p “提示信息” 变量名 变量名 输入两个变量,用空格隔开,可以自定义任意多个
3.注意
" " 是弱引用 ,里面的命令可以执行,’ ’ 是强引用 ,不可执行
6.数的运算
1.整数运算,num1=1.num2=2 , $都可去掉
expr $num1 + $num2 ----------->3 运算符要留空格隔开
echo $(($num1+$num2))------->3
echo $[num1+num2]------------->3
let sum=$num1+$num2 ,容易写成set.
2.小数运算
echo “print 2.0/4” | python
echo “2.2*3” | bc
7.变量内容的删除和替换,url=www.baidu.com
输出变量的长度:echo ${#url}
输出变量:echo ${url}
从前向后匹配删除第一个. : echo ${url#*.} >>baidu.com
从前向后匹配删除第最后一个.(贪婪匹配) : echo ${url##*.} >>com
从后向前匹配直到第一个. : echo ${url%.*} >>www.baidu
从后向前匹配直到最后一个.(贪婪匹配) : echo ${url%%.*} >>www
内容的替换(一个):echo ${ulr/w/W} >>Www.baidu.com
内容的替换(全部):echo ${url//w/W} >>WWW.baidu.com
切片:echo ${url:0:5} >>www.b ,0表示开始位置的索引,5表示截取长度,与python有差异
变量的替代:echo ${变量名:-新的变量值}
变量没有被赋值(包括空值):输出新的变量值
变量被赋值:输出原变量值 (${变量名:-新的变量值},空值也会被替代)