目录
一.Shell解释器介绍.....................................................................................................................1
二.Shell执行的文件.....................................................................................................................2
三.Linux终端快捷方式.................................................................................................................3
四.括号功能介绍...........................................................................................................................4
五.变量...........................................................................................................................................5
六.判断...........................................................................................................................................6
七.循环...........................................................................................................................................7
八.进程并发...................................................................................................................................8
九.数组...........................................................................................................................................9
十.函数..........................................................................................................................................10
十一.小知识总结..........................................................................................................................11
一.Shell介绍:
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。
二. Shell执行的文件:
开机执行文件:
1. 系统级别:/etc/profile //加载变量
/etc/bashrc //执行文件命令
2. 用户级别:.bash_profile
.bashrc
关机执行文件:
.bash_history //加载文件历史命令
.bash_logout //执行文件命令
注:su - :4个文件全都执行。 su:只执行/etc/bashrc和.bashrc文件。
三.Linux终端快捷方式:
1. 快捷键:
ctrl+r:搜索历史命令 ctrl+d:退出当前shell ctrl+a:到行首 ctrl+b:到行尾
ctrl+u:删除光标前 ctrl+k:删除光标后 ctrl+s:锁屏 ctrl+q:解锁
ctrl+y:撤销 ctrl+c:终止执行 ctrl+z:放到后台并暂停。
2. 命令历史记忆:
!:历史命令ID号。 !:字符。 !$:上一个文件的最后参数。 !!:上一个命令。
四.括号功能介绍:
( ):在子shell执行命令。 $( ):命令替换。 $(( )):数值运算。 {}:集合
${}:变量应用。 [ ]:判断。 [[ ]]:判断支持正则。 $[ ]:数值运算。
echo ${#URL} //输出URL内字符有多少。
echo ${URL#*.} //从左往右删除第一个.
echo ${URL##*.} //从左往右删除到最后一个.
echo ${URL%*.} //从右往左删除第一个.
echo ${URL%%*.} //从右往左删除到最后一个.
echo ${URL:4:5} //切片从输出第4个字符到后面5个字符
echo ${URL/www/zcl} //替换第一个
echo ${URL//www/zcl} //替换全部
${URL:=www.baidu.com} //只有URL没有被赋值和为空时,赋予后面的数值。${URL=www.baidu.com} //只有URL没有赋值则,赋予一个数值,为空不赋值。${URL:-
www.baidu.com} //只有URL没有被赋值和为空时,显示后面的数值。${URL-
www.baidu.com} //只有URL没有被赋值,显示后面的数值。
五.变量:
1. 变量类型:
交互式变量: read -t 5 -p "提示文字" 变量名称
自定义变量:只在当前shell生效
环境变量: 当前shell以及子shell都生效
位置变量: $1 $2 $3 $4 $5 $6 $7 $8 ${9 }
预定义变量:
$0:脚本名称
$*:所有的参数
$@:所有的参数
$#:参数的个数
$$:当前进程的PID
$!:上一个后台进程的PID
$?:上个命令的返回值。
2.变量查,增,删:
env:查看所有环境变量:
export:设置环境变量
unset:取消环境变量
3.常用环境命令:
PS1:设置提示符
IFS:变量拆分,默认是空格,tab,换行符。OLD_IFS=$IFS:保存IFS。IFS=OLD_IFS:还原。
PATH:外部命令存放路径。
UID:root的uid默认为0
TMOUT:会话超时时间
HISTSIZE:历史命令保存多少条。
HISTTIMEFORMAT=’%F%T’:历史命令执行时间
LANG:语言环境 LANG=en_US.UTF-8 英文环境 LANG=zh_CN.UTF-8 中文环境。
六.判断:
test -d a.txt -a -f zcl.txt //结果为1 -a表示与
test -d a.txt -o -f zcl.txt //结果为0 -o 表示或
test ! -d a.txt -o -f zcl.txt //结果为1 !表示非
[ 条件表达式 ]
[[ 条件表达式 ]]
1.文件判断:
-d:判断是否为目录。 -f:判断是否为文件。 -e:判断是否存在。 -r:判断读的权限。
-w:是否有写得权限。 -x:是否有执行的权限。-b:文件存在并且是快设备。 -c:文件存在并且是字符设备。 -k:文件存在并设置粘滞位。-L:文件存在并且是链接文件 -ot:文件比谁新。 -nt:文件比谁旧。
2.整数判断:
-eq:判断是否相等。 -nq:判断是否不相等。 -lt:判断是否小于。 -le:判读是否小于等于。 -gt:判读是否大于。 -ge:判断是否大于等于。
3.字符串判断:
==:判断是否等于。 !=:判读是否不等于。 -z:判断是否为空。
4.逻辑判断:(&&与,||或,!非)等运算符。
if [ -f name ] && [ -d name ];then echo 'yes';else echo 'no';fi &&:只要一方判断错误就no。
if [ -f name ] || [ -d name ];then echo 'yes';else echo 'no';fi ||:只要一方判读正确就是yes。
if [ ! -f name ] && [ ! -d name ];then echo 'yes';else echo 'no';fi !:取反判断。
七.循环:
while read line;do echo “$line” ;done < /root/a.txt
#while IFS进行了过滤,对变量内容为换行符作为拆分。
for i in `cat /root/a.txt`;do echo $i ;done
#for遵循了IFS:默认是以空格,tab,换行符作为分隔。 需要设置IFS=$’\n’。只有换行分隔。
八.进程并发:
1.匿名管道和命名管道都是文件:
匿名管道:| 注:普文件读取后不会删除数据,而管道文件会读取后删除数据。
命名管道:mkfifo /tmp/fifo1 echo “wudidege” > /tmp/fifo1 cat /tmp/fifo1
exec 6<> file1 打开一个文件并指定文件描述符。
exec 6<&- 关闭文件,后会自动删除文件描述符。
无限制并发:
{命令}&
有限制并发:
count=5
mkfifo test_fifo
exec 8<> test_fifo
rm -rf test_fifo
seq $count >&8
start=`date +%s`
for i in {1..50}
do
read -u 8
{
echo $i;sleep 2
echo >&8
}&
done
wait
exec 8<&-
echo "Time" "$((`date +%s` - start))s"
九.数组:
普通数组:只能使用整数作为索引。
关联数组:可以使用整数和字符串作为索引。
一.普通数组:
数组赋值:
方法一:一次赋予一个值。
数组名[下标]=变量值。
#array1[0]=zcl
#array1[1]=lfy
#array1[2]=ycq
#array1[zcl++]=xzj //添加一个xzj的元素,并且索引是3。
方法二:一次赋予多个值。
#array1=(zcl lfy ycq)
#array2=(`cat /etc/passwd`) //如果文件每一行中没有空格,则默认将每一行作为元素存储到元组里面。如果有一空格则会切分后再存储。
#array3=(`ls /var/ftp/Shell/for*`)
#array4=(zcl lfy ycq “ZCL CTO”)
#array5=($name $size $count)
#array6=(1 2 3 4 “ZCL CTO” [20]=WUDI)
查看数组:
#declare -a
访问数组:
#echo ${array1[0]} //访问数组内的第一个元素。
#echo ${array1[@]} //访问数组内的所有元素,等同于echo ${array1
}
#echo ${#array1[@]} //查看数组内元素的数量。
#echo ${!array1[@]} //获取数组内元素的索引。
#echo ${array1[@]:1} //从数组下标1开始访问。
#echo ${array1[@]:1:2} //从数组下标1开始访问两个元素。
遍历数组:
for i in ${!a[@]};do echo "$i: ${a}" ;done
关联数组:
declare -A //查看关联数组。
declare -A sex //定义一个关联数组。
sex=([m]=1)
sex+=([f]=1) //追加一个元素
let sex[f]++ //元素的值加1
let zcl[$a]++ //添加一个$a作为索引和遇到相同元素加1。
十.函数:
函数用于完成特定功能的代码块,便于复用代码,函数必须先定义才能使用。
定义:
1.函数名(){ 2. function 函数名(){
实现的功能代码 实现的功能代码
} }
函数调用:
函数名 $1 $2 $3 将位置参数传入函数内。
十一.小知识总结:
++赋值:
let x=a++:先赋值在++。
let y=++b:先++在赋值。
expr 1 + 1
变量的引用:
a='ls -l':强引用会输出内容本身。等同于""。
a=`ls -l`:弱引用会执行命令。等同于$()。
type:查看命令的绝对路径。
file:查看文件的类型。
for i in {1...$a} //错误写法这里识别不了变量
for i in `seq $a` //正确写法
表示码:
0:标准输入。 1:标准输出。 2:错误输出。 &:表示1和2。
echo 变量 //不打印换行
echo “变量” //加上双引号后打印换行