变量
1 本地变量
localtest=“test”
echo ${localtest} or echo $localtest
读取所有本地变量
set命令
只读变量
readonly localtest 不能再次赋值了
readonly命令
查看当前shell下面有那几个只读变量
readonly -p
环境变量
cat /etc/profile //环境变量目录
export chinalab="shenzhen"
env or export //查看当前环境目录
readonly //设置只读的环境变量
区别:本地变量不能运行到所有子进程中,环境变量可以
显示单个变量取值
echo $变量名称 or ${变量名称}
例如:
[root@bogon root]# testvar="jingjing"
[root@bogon root]# echo $testvar
jingjing
${变量名称:+值}
如果设置了变量名称,则显示变量值,否则,为空
[root@bogon root]# echo ${testvar:+"chinalab"}
chinalab
[root@bogon root]# echo ${1:+"chinalab"}
${变量名称:?值}
如果未设置变量名称,则显示错误信息:值
[root@bogon root]# echo ${testvar1:?"no define"}
-bash: testvar1: no define
${变量名称:-值}
未设置便令名称,这显示其值,设置变量名称,则返回
原来的值
[root@bogon root]# echo ${testvar2:-"ddddddd"}
ddddddd
[root@bogon root]# testvar2=22222
[root@bogon root]# echo ${testvar2:-"ddddddd"}
22222
${变量名称:=值}
如果未设置值,这设置值,并显示,如果已经设置了,
则显示以前的值
[root@bogon root]# echo ${testvar2:="sa"}
22222
[root@bogon root]# echo ${testvar3:="sa"}
sa
清除变量
unset
[root@bogon root]# echo $testvar
jingjing
[root@bogon root]# unset testvar
[root@bogon root]# echo $testvar
[root@bogon root]#
注意:readyonly 不能取消变量
位置变量$0,$1,....$9
脚本中位置参数
注意:$0为脚本名字,参数从$1开始,依次类推
#!/bin/bash
#parm
echo "$0为文件名称: $0"
echo "$1第一个参数: $1"
~
执行结果:
[root@bogon sun]# bash parm sasasasa
parm为文件名称: parm
sasasasa第一个参数: sasasasa
向系统命令传递参数是一样的
标准变量
EXINIT
HOME //当前目录
IFS //设置分隔符,默认为tab或者空格,可以自定义
LOGNAME //当前登录名
MAIL //当前用户存储邮箱放在哪里
MAILCHECK //每隔多少秒检查新的邮件
MAILPATH //存储那几个文件中
TERM //终端类型
PATH //可执行文件寻找的路径
TZ //表示时区
PS1 //当前显示格式
PS2 //定义多行的格式
PWD //表示当前目录
shift 命令
移动变量参数
引号:
双引号可引用除了$,`,
单引号:没有任何特殊的命令,所有全部当做字符串
反引号:执行系统的命令,引号内作为系统命令执行
反引号:防止shell误解特殊含义的字符
运算符
位运算符
$[2+3] 得到具体的数值
赋值运算符
[root@bogon sun]# var=65
[root@bogon sun]# let var+=4;
[root@bogon sun]# echo $var
69
read 读取键盘
#!/bin/bash
#readname
echo -n "First Name:" //-n 不换行
read firstname
echo -n "Last Name:"
read lastname
echo -e "your first name is:${firstname}\n"
echo -e "your last name is : ${lastname}\n"
[root@bogon sun]# chmod 775 readname
[root@bogon sun]# ./readname
First Name:china
Last Name:sun
your first name is:china
your last name is : sun
cat 命令
简单而通用的命令,可以显示文件内容
注意:他不会停下来,而会输出所有,如果想输出第一页,请使用管道
[root@bogon sun]# cat findf readname >myfile123
[root@bogon sun]# cat myfile123
find /home/chinaitlab/shell -name $1 -print
#!/bin/bash
#readname
echo -n "First Name:"
read firstname
echo -n "Last Name:"
read lastname
echo -e "your first name is:${firstname}\n"
echo -e "your last name is : ${lastname}\n"
分页显示
cat ls.txt|more 用more分页
管道运算符,把一个命令的输出作为下一个命令的输入
[root@bogon sun]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 7123640 5017556 1744220 75% /
/dev/sda1 101089 15041 80829 16% /boot
none 256600 0 256600 0% /dev/shm
[root@bogon sun]# df -k|awk '{print $1}'
Filesystem
/dev/sda2
/dev/sda1
none
[root@bogon sun]# df -k|awk '{print $1}' |grep -v FIlesystem
Filesystem
/dev/sda2
/dev/sda1
none
[root@bogon sun]# df -k|awk '{print $1}' |grep -v Filesystem
/dev/sda2
/dev/sda1
none
[root@bogon sun]#
tee命令 吧输出端副本输送到标准输出,另一个副本拷贝到相应的文件中
tee -a file
如果希望看到输出的同时,将其存入一个文件,这个命令在合适不过了
一般用于管道之后
who |tee -a who.txt
注意:-a是追加,不加-a就覆盖掉了
[root@bogon sun]# df -k|awk '{print $1}' |grep -v Filesystem |tee -a pration.txt
/dev/sda2
/dev/sda1
none
[root@bogon sun]# cat pration.txt
/dev/sda2
/dev/sda1
none
文件重定向
cat score.txt|awk `$0 "/218.79.131.96/`|grep "php"|wc -l