信号量
概念
为了保证共享内存不会同时被多⼈修改从⽽造成不同步,⼀般使⽤信号量。
示例
新建信号量
int semget(key_t key,int nsems,int semflg);
修改信号量的值
----------------------- Page 7 -----------------------
int semop(int sem_id,struct sembuf * sem_opa,size_t num_sem_ops);
壳牌脚本编程
简介
外壳脚本,就是利⽤壳的命令解释的功能,对⼀个纯⽂本的⽂件进⾏解析,然后执⾏这些功能,也
可以说壳牌脚本就是⼀系列命令的集合.Shell可以直接使⽤在赢/ Unix / Linux操作系统上⾯,并且可以调⽤
⼤量系统内部的功能来解释执⾏程序,如果熟练掌握外壳脚本,可以让我们操作计算机变得更加轻
松,也会节省很多时间。
应⽤场景
将囧些复杂的命令简单化(例如平时我们提交哉次Git代码可能需要很多步骤(git add。,git commit)
-m“”,git push),但是我们可以睿Shell简化成⼀步)
⾃动打包,编译,发布等功能
完成快捷修改⽂件名,移动⽂件,清理磁盘中空⽂件夹等有技巧性的操作
总之⼀切有规律可循的任务都可以尝试⼀下shell脚本
编写
#!/ bin / sh的
...
注:⾸⾏为#!/ bin / sh,指定脚本的默认解释器路径。
运⾏⽅法
作为可执⾏的程序:将代码保存在.SH格式的⽂件内并直接调⽤执⾏
chmod + x ./test.sh#使脚本具有执ο权限
./test.sh#运蛾脚本Shell变量
作为解释器的参数:运搓解释器,参数为shell脚本的鹧件名
/ bin / sh test.sh
壳牌变量
定义变量
定义变量时,变量名不加美元符号($,PHP语⾔中变量需要)
HELLO ='你好世界!';
注:等号两端不能有空格,否则被当成多个操作。
----------------------- Page 8 -----------------------
命名只能使⽤英⽂字⺟,数字和下划线,⾸个字符不能以数字开头。
中间不能有空格,可以使⽤下划线(_)。
不能使⽤标点符号。
不能使⽤庆典⾥的关键字。
查看变量
创建变量后,利睿set | grep可以查看set中的变量,例如:
设置| grep你好
删除变量
利崴unset可以删除变量,例如:
你好,你好
输出变量
有多种灵活的输出变量的⽅式:
echo $ {Hello}
echo $你好
echo $ {Hello:3:5}#从下标为3的字符输出5个字符
echo $ {Hello:3}#从下标为3的字符输出
echo $ set#展示所有变量
#参数的组合
ABC = “ABC”
DEF = “高清”
echo $ {ABC} $ {DEF} #abcdef
echo $ {ABC}'111'$ {DEF}#abc111def
#特殊的变量
$$#PID
$?#芥于查看上⼀个程序的退出状态,返回结果为0~255,0为成功,1~255为失败
$ ##参数个数
$ 0#当前伫件名称
环境变量
概念
所有的程序,包括壳启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运⾏。
必要的时候外壳脚本也可以定义环境变量。
设置环境变量
1.在/ etc / pro fi le尼件中添加变量(对所有睿户セ效)
2.在睿户⽬录下的.bash_pro fi le⽂both增增变量(对单リ崴户セ效)
3.直接运导出命令定义变量(只对当前shell⽣效)
----------------------- Page 9 -----------------------
输出环境变量
使崴env可以查看所有环境变量
Shell测试命令
⽤处
Shell中的test命令⽤于检查某个条件是否成⽴,它可以进镐数值,字符和愧件三个⽅的的测试。
写法
测试条件或[条件],可以兑换$?如果判断,请查看返回值或者。
数值测试
参数说明
-eq等于则为真
-ne不等于则为真
-gt茫于则为真
-ge譬于等于则为真
-lt⼩于则为真
-le⼩于等于则为真
字符串测试
参数说明
=等于则为真
!=不相等则为真
-z字符串字符串的⻓度为零则为真
-n字符串字符串的⻓度不为零则为真
壳牌流程控制
如果
----------------------- Page 10 -----------------------
如果条件
然后
命令1
命令2
...
commandN
科幻
如果别的
如果条件
然后
命令1
命令2
...
commandN
其他
命令
科幻
if else-if else
如果条件1
然后
命令1
elif条件2
然后
命令2
其他
commandN
科幻
对于
与其他编程语⾔类似,壳牌⽀持的循环。
对于循环⼀般格式为:
for item in item1 item2 ... itemN
做
命令1
命令2
...
commandN
DONE
而
----------------------- Page 11 -----------------------
而循环⽤于不断执⾏⼀系列命令,也⽤于从输⼊⽂件中读取数据;命令通常为测试条件其格式
为:
条件
做
命令
DONE
直到循环
直到循环执列系列命令直条条件为真时停⽌。
直到循环与而循环在处理ACS式上刚好相反。
⼀般而循环优于直到循环,但在某些时候 - 也只是极少数情况下,直到循环更加有睿。
直到语法格式:
直到条件
做
命令
DONE
案件
Shell case语句为多选择语句。可以⽤case语句匹配⼀个值与⼀个模式,如果匹配成功,执驭相匹配
的命令。病例语句格式如下:
案例值
模式1)
命令1
命令2
...
commandN
;;
模式2)
命令1
命令2
...
commandN
;;
ESAC
壳包括
和其他语⾔⼀样,Shell也可以包含外部脚本。这样可以很螃便的封装⼀公公代⽴⽴⽴⽴⽴⽴⽴⽴
⽂件。
Shell⽂包包含的语法格式如下:
----------------------- Page 12 -----------------------
。filename#注意点号(。)和鹧件名中间有⼀空格
#或
源文件名
Shell I / O.
回声
输出到stdout标准输出流。
读
读芨⾃stdin标准输ค流。
猫
⽂件查看,连接,创建,追加。
4. |
利崴“|”符号连接,连续输出多个命令的执⾏结果。
发球
读取标准输⼊的内容,并将其内容输出成⽂件。
壳牌函数
Shell可以睿户定义函数,然后在shell脚本中可以随便调睿。
壳牌中函数的定义格式如下:
[功能] funname [()]
{
行动;
[return int;]
}
说明:
可以带函数fun()定义,也可以直接fun()定义,不带任何参数。
参数返回,可以显示加回返回,如果不加,将以最后⼀条命令运⾏结果,作为返回值。
返回后跟数值N(0-255)
本篇非作者所著:来自一位大神!