查看bash是否安全:
[root@localhost ~]# env x='(){:;}; echo be careful' bash -c " echo this is a test"
this is a test
*bash执行顺序:
/etc/profile–>/etc/profile.d–>~/.bash_profile–>/.bashrc–>/etc/bashrc
[root@localhost ~]# /root/i.sh
-bash: /root/i.sh: Permission denied
[root@localhost ~]# chmod +x i.sh
[root@localhost ~]# ./i.sh
HELLO world
执行脚本方法:
[root@localhost ~]# /root/i.sh
HELLO world
[root@localhost ~]# sh i.sh
HELLO world
[root@localhost ~]# source i.sh
HELLO world
[root@localhost ~]# . i.sh
HELLO world
[root@localhost ~]# bash i.sh
HELLO world
.和source加载文件,将局部变量加载成全局变量
多行注释:
:<<BLOCK
代码…
BLOCK
没有必要使用cat命令
eg:cat /etc/passwd | grep guru
使用1 guru /etc/passwd即可
变量的导出:
set:输出所有变量
env:输出全局变量
declare:输出所有变量、函数和已经导出的变量
定义全局变量:
[root@localhost ~]# export NAME=anliu
[root@localhost ~]# env |grep NAME
HOSTNAME=localhost.localdomain
NAME=anliu
LOGNAME=root
[root@localhost ~]# AGE=18
[root@localhost ~]# env |grep AGE
[root@localhost ~]# export AGE
[root@localhost ~]# env |grep AGE
AGE=18
设置登录提示语句:
[root@localhost ~]# vi /etc/motd
生成加密码:
CentOS 6:
grub-mkpasswd-pbkdf2
CentOS 7:
grub2-mkpasswd-pbkdf2
生成自然数:
[root@localhost ~]# echo {0..10}
0 1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# echo {00..10}
00 01 02 03 04 05 06 07 08 09 10
[root@localhost ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# seq 10 2 20(10~20,步长为2)
10
12
14
16
18
20
[root@localhost ~]# seq 8 10
8
9
10
-w:与尾数宽度相等
[root@localhost ~]# seq -w 8 10
08
09
10
[root@localhost ~]# seq -w 1 03
01
02
03
-f:格式化输出
[root@localhost ~]# seq -f "%3g" 8 12
8
9
10
11
12
[root@localhost ~]# seq -f "%03g" 8 12
008
009
010
011
012
-s:使用指定字符串分隔数字
[root@localhost ~]# seq -s "`echo -e "\t"`" 8 12
8 9 10 11 12
[root@localhost ~]# a="北京欢迎你:\n 世界~~"
[root@localhost ~]# echo $a
北京欢迎你:\n 世界~~
[root@localhost ~]# echo -e $a
北京欢迎你:
世界~~
生成随机数:
1、[root@localhost ~]# echo $RANDOM
2、[root@localhost ~]# awk 'BEGIN{srand();print rand()}'(生成随机小数)
0.681664
3、[root@localhost ~]# openssl rand -base64 12|md5sum |cut -c 1-8(截取8位随机数,带字母,md5sum加密)
d1df9d56
4、[root@localhost ~]# date +%s%N |cut -c 8-15
13164971
[root@localhost ~]# date +%s%N |md5sum |head -c 8(加密生成)
283ce550
5、[root@localhost ~]# cat /dev/urandom |head -n 10 |md5sum |head -c 10
bf093e0b08
生成随机UUID:
[root@localhost ~]# cat /proc/sys/kernel/random/uuid
eed65d5c-95f8-4b02-833d-db03db002356
生成随机MAC地址:
[root@localhost ~]# echo "00:60:2F$(dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e ' /1 ":%02X"')"
00:60:2F:DD:E6:B2
[root@localhost ~]# [ -f file1 ] || touch file1(判断是否有file1,||:若没有,则创建file1)
[root@localhost ~]# [ -f file2 ] || echo "file2 meiyou"
file2 meiyou
[root@localhost ~]# [ -f file1 ] && echo "file1 you"(&&:若成立)
file1 you
变量:
变量是计算机内存的单元,其中存放的值可以改变;当shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它放到一个变量中。
**命名规则:**可以由字母、数字和下划线组成,但是不能以数字开头,如果变量名是“2name”则是错误的。
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
1、变量用等号连接值,等号左右不能有空格。
2、变量的值如果有空格,需要使用单引号或双引号包括。
3、在变量的值中,可以使用“\”转义符。
4、如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“ 变 量 名 ” 或 用 变量名”或用 变量名”或用{变量名}包含。
5、如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
6、环境变量名建议大写,便于区分。
调用变量:echo $变量名
删除变量:unset 变量名
变量叠加:
[root@web01 ~]# aa=123
[root@web01