当使用sigqueue传递信号发送额外数据时,需要设置act.sa_flags = SA_SIGINFO;
l shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。
软硬连接 命令ln
[[email protected] shell]$ ln my.tar.gz my2.tar.gz 建立一个硬连接
[[email protected] shell]$ ln -s my.tar.gz kjfs 建立一个软连接
l shell脚本基本元素
#!/bin/bash #shell脚本 mytext="hello world" echo $mytext; |
注意初学者易犯错误: 1) 第一行#不是注释其他#都是注释; 2) echo $mytextA;写错现象; 3) 写错现象#!bin/bash 忘记写bin前面的那个斜杠 4) 脚本如果没有执行权限 chmod 111 01hello.sh,如何办 5) chmod u+x 01hello.sh chmod u-x 01hello.sh |
自定义别名: alias ll = ‘ls -alh’
ls `cat myfile.txt` –alh通过单反引号,把’cat myfile’的内容输出传给ls, 原理是单反引号里的内容当作命令,但如果不是标准命令,则前面需要一个命令去接.
后台处理 后台nohup commond &
l 管道
把一个命令的输出作为另外一个命令的输入
ls -l| sort; ls | sort
重定向<输入>输出
与管道相关,可以改变程序运行的输入来源和输出地点
sort< myfile.txt
sort<myfile.txt >myfile+sort.txt
本地变量在用户现有的shell生命期的脚本中使用。
仔细思考本地变量背后的含义! echo $MYV 每登录一个终端,都会运行一个shell程序,这个本地变量,就保存在这个shell程序中;如果再新登录,将启动新的shell程序,与原来的shell不同。
环境变量用于所有用户进程(经常称为子进程)。
登录进程称为父进程。shell中执行的用户进程均成为子进程。不像本地变量(只用于现在的shell),环境变量可用于所有子进程,这包括编辑器、脚本和应用程序。
变量替换(显示变量)
$(variablename) 显示实际值
$(variablename:+value) 若设置了variablename,则显示;否则空
$(variablename:?value) 若未设置variablename,则显示用户自定义信息valude
$(variablename:-value) 若未设置variablename,则显示其值
$(variablename:=value) 若未设置了variablename,则设置其值,并显示
unset 清除变量
位置变量
#!/bin/bash
#param
echo "脚本的名字 $0"
echo "parm 1: $1
echo "parm 2: $2"
echo "parm 3: $3"
echo "parm 4: $4"
echo "parm 5: $5"
双引号可以解析出变量
单引号解析不了
单反引号里面的内容会当成命令输出
shell输入与输出
echo -e -e是表示解析转义字符
-n是表示不换行,默认换行
read语句可以从键盘或文件的某一行文本中读入信息,并将其制复制给一个变量。
read var1 var2 …. 若只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇上第一个文件结束符或者回车。如果给了多个变量,他们按照顺序分别赋予不同的变量。shell将用空格作为变量之间的分隔符。
cat myfile.txt | more 当myfile.txt比较大时,使用该命令可以设置分页符,一页一页看
shell是从左至右分析相应的命令
文件重定向
cat file1 file2 file3 >err.out 2<&1
将标准输出,标准错误,都定向到err.out中
1、 exec命令可以用来代替当前shell;换句话说,并没有启动子shell,使用
这一命令时,任何现有环境都将被清除,并重新启动一个shell。
exec command command通常是一个shell脚本。
Eg:测试执行完该命令后,需要重新登录shell,然后export声明的变量都失效了。exec ./hello.sh
2、对文件描述符进行操作时,也只有这个时,它不会覆盖你的当前的shell。
#!/bin/bash
#file_desc
#
exec 3<&0 0<name.txt #将标准输入保存至文件描述符3,再将name.txt放到标准输入
read line1#读取 从name.txt
read line2#读取 从name.txt
exec 0<&3 #将前面保存到文件描述符3的0号文件描述符再放到0号位置,
echo $line1
echo $line2