name=abcd
name=$(date) echo系统变量和赋值系统变量都需要使用$()
name=$var$var13123 多个变量连接和字符增加
set 查看系统所有变量
unset 变量名 删除变量
| 变量作用 |
描述 |
| $n |
$0代表命令的本身,$1代表第一个参数 |
#!/bin/bash
echo $0;
echo $1;
echo $2;
[root@localhost sh]# ajax start abc adc
/root/sh/ajax
start
abc
| 变量作用 |
描述 |
| $* |
代表所有的参数变量,但是把所有参数看成一个整体 |
| $@ |
代表所有的参数变量,把所有参数单独对待,for in |
#!/bin/bash
echo '*:'$*;
echo '@:'.$@;
[root@localhost sh]# ajax start abc adc
*:start abc adc
@:start abc adc
#!/bin/bash
echo $#;
[root@localhost sh]# ajax start abc adc
3
| 变量作用 |
描述 |
| $? |
获取上次命令是否执行成功,0代表成功 |
| $$ |
获取当前进程pid |
| $! |
后台运行的最后一个进程号 |
| 变量作用 |
描述 |
| -p |
等待用户输入时输出的提示信息 |
| -t |
等待用户输入的时间,单位为秒 |
| -s |
隐藏用户输入的信息 |
| -n |
接收到指定的字符数就会直接执行 |
#!/bin/bash
read -t 30 -p '请输入你的用户名: ' name;
echo $name;
read -t 30 -s -p '请输入你的密码: ' pass;
echo -e "\n"$pass;
read -n 1 -p '你已经确定要登陆了吗?[y/n]: ' sub
echo -e "\n"$sub;
[root@localhost sh]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:997:996::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nginx:x:1000:1000::/home/nginx:/bin/bash
列出当前系统可登陆的用户,-v是取反
[root@localhost ~]# cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
nginx
[root@localhost ~]#
[root@localhost sh]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 6.7G 1005M 5.8G 15% /
devtmpfs 491M 0 491M 0% /dev
tmpfs 498M 0 498M 0% /dev/shm
tmpfs 498M 6.6M 491M 2% /run
tmpfs 498M 0 498M 0% /sys/fs/cgroup
/dev/sda1 497M 97M 401M 20% /boot
获取指定硬盘设备的占用百分比
[root@localhost ~]# df -h | grep rhel-root | awk ‘{print $5}’ | cut -d "%" -f 1
15
为什么要用awk?因为字符串分割是通过空格。
print $5 是什么意思? 第5列
| 选项 |
描述 |
| -d |
判断该文件是否存在,而且是否为目录文件 |
| -e |
判断该文件是否存在 |
| -f |
判断该文件是否存在,而且是否为普通文件 |
[root@localhost ~]# [ -d sh ] 必须有这空格分开
[root@localhost ~]# echo $?
0
[ -d sh ] && ([ -r sh ] && echo "没有读的权限" ||) echo " 读的权限") || echo '不是一个目录'
ls -ld sh | awk '{print substr($1,4,1)}' 通过字符串截取,得到权限标识符
1 && echo 'true' || echo 'false' 这一句应该怎么理解?
1 ? true : false; 这样好理解吧?
| 选项 |
描述 |
示例 |
| -z |
判断字符串是否为空(为空返回真) |
[ -z 'string' ] |
| -n |
判断字符串是否为空(为空返回假) |
[ -n 'string' ] |
| -gt |
两个数值比较 |
[ num1 -gt num2 ] |
| -lt |
两个数值比较 |
[ num1 -gt num2 ] |
| 选项 |
描述 |
示例 |
| -a |
and |
[ 1 -gt 1 -a 1 -gt 1 ] |
| -o |
or |
[ 1 -gt 1 -o 1 -gt 1 ] |
| == |
值 |
[ num1 == num2 ] |
| != |
不等于 |
[ !num1 != num2 ] |
1 #!/bin/bash
2 read -p '请输入密码: ' pass
3 if [ $pass == '578115zyy' ]
4 then
5 echo '恭喜你答对了哟';
6 else
7 echo '密码错了,好好检查一下';
8 fi
#!/bin/bash
read -p '请输入一个字符串,yes/no ' param
case $param in
yes)
echo -e '\r\n你输的是yes'
;;
no)
echo -e '\r\n你输入的是no'
;;
*)
echo -e '\r\n你不按套路出牌'
esac
#!/bin/bash
for i in ~/*
do
echo $i;
done
for i in 1 2 3 4
do
echo $i;
done
s=0;
for((i=0;i<=100;i++))
do
s=$[$s+$i];
echo $i;
done
echo $s;