Shell脚本实现ftok函数

时间:2023年01月25日

/

来源:啊嗷呜呜呜

/

编辑:本站小编

收藏本文

下载本文

以下是小编帮大家整理的Shell脚本实现ftok函数,本文共6篇,欢迎大家分享。本文原稿由网友“啊嗷呜呜呜”提供。

篇1:Shell脚本实现ftok函数

这篇文章主要介绍了Shell脚本实现ftok函数,ftok函数是操作系统底层中很有名的一个函数,本文讲在Shell中如何实现同样算法的函数,需要的朋友可以参考下

“古老的 Sys IPC 仍然有好几种有效的用途,三种 IPC 对象是共享内存,信号灯和消息。”当使用到 IPC 的这些对象时,你需要为每个对象创建一个 Key。虽然理论上来说我们在定义一个 IPC Key 的时候可以使用任意自己喜欢的 Key ,但为了避免与其他的程序产生定义重复,在 UNIX/Linux 中一般会使用 key_t ftok(const char *path, int id) 函数来生成一个比较唯一的 Key 值。然而,“每个人都讨厌 System V IPC。它比打孔纸带还慢,使用与文件系统完全无关少得可怜的名字空间,使用人类讨厌的数字给它的对象命名,并且还常常自己忘记自己的对象,你的系统管理员经常需要用 ipcs(1) 查找那些丢失了的对象并且用 ipcrm(1) 删除它们,还得求老天保佑不要在用光内存以后才发现问题。” 对于来实现进程监控/自动重启Bash Shell 脚本来说,在脚本里面硬编码进当前程序用到的 Key 值肯定不是个好办法,最好是实现相同算法的 ftok 函数。

代码如下:

#!/bin/sh

let key=0

function ftok {

pathname=$1;

proj_id=$2;

str_st_ino=`stat --format=‘%i‘ “${pathname}” 2>/dev/null`;

str_st_dev=`stat --format=‘%d‘ “${pathname}” 2>/dev/null`;

if [ “x${str_st_ino}” = “x” -o “x${str_st_dev}” = “x” ] ; then

return 1;

fi

let st_ino=${str_st_ino}

let st_dev=${str_st_dev}

# 注意这里的位操作运算符需要加转义符

let key1=${st_ino}\\&16#FFFF

let key2=${st_dev}\\&16#FF

let key2=${key2}\\<\\<16

let key3=${proj_id}\\&16#FF

let key3=${key3}\\<\\<24

let key=${key1}\\|${key2}

let key=${key}\\|${key3}

}

function echohelp(){

echo “ftok generator”

echo “Usage:ftok pathname projid”

exit 5

}

if [ $# -ne 2 ] ; then

echohelp

fi

sPathName=$1

let nProjectID=$2

if [ “${sPathName:0:1}” != “/” ] ; then

sPathName=${PWD}/${sPathName}

fi

if ! test -f ${sPathName} ; then

echo “No File Found![${sPathName}]”

exit 4

fi

ftok “${sPathName}” “${nProjectID}”

echo ${key}

篇2:Shell脚本实现简单分割字符串

这篇文章主要介绍了Shell脚本实现简单分割字符串,本文讲解使用CUT命令实现以逗号、分号或其它分隔符来切割字符串,需要的朋友可以参考下

我们有这样一个字符串:

代码如下:

info=‘abcd;efgh‘

现在想获取abcd和efgh,我们可以简单地用cut工具来获取:

代码如下:

fstr=`echo $info | cut -d \\; -f 1`

sstr=`echo $info | cut -d \\; -f 2`

这里主要是用了cut工具的-d和-f参数:

-d:指定字段的分隔符,默认的字段分隔符为“TAB”;

-f:显示指定字段的内容;

关于cut工具其他参数可参考这里:cut命令

篇3:shell脚本编程实现9*9乘法表

这篇文章主要介绍了shell脚本编程实现9*9乘法表,本文直接给出实现代码,并同时总结了实现代码中的知识点,需要的朋友可以参考下

脚本内容

代码如下:

#!/bin/bash

for i in “1” “2” “3” “4” “5” “6” “7” “8” “9”

do

for j in “1” “2” “3” “4” “5” “6” “7” “8” “9”

do

if [ ${j} -lt ${i} ]

then

k=$((i * j))

echo -n ${i}*${j}=${k}$‘\\t‘

fi

if [ ${j} -eq ${i} ]

then

k=$((i * j))

echo  ${i}*${j}=${k}

fi

done

done

输出结果

代码如下:

[iufo@iufo test]$ bash ./test.sh

1*1=1

2*1=2 2*2=4

3*1=3 3*2=6 3*3=9

4*1=4 4*2=8 4*3=12 4*4=16

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

[iufo@iufo test]$

总结下知识点

1、for 循环

代码如下:

for v_1 in   [list]

do

done

list  如果是“1 2 3”,那么v_1值就是一个数组1 2 3

如果要每次只给v_1赋一个值,那么需要分开写,即”1“ ”2“ ”3“

2、bash中的算术运算

代码如下:

k=$((i * j))

等号左右不能有空格,没有空格为赋值,

shell脚本编程实现9*9乘法表

此外算术运算需要使用$()括起来,表示先进行运算,将结果算出来。运算符加减乘除两边要带着空格。

3、echo命令的使用

echo,输出echo后面的字符。

默认输出后面带有一个换行符。

-n参数取消末尾带的换行符。

-e参数可使转义字符生效。转义符为“\”,常用的转义符有 \\\\  \\t   \\n

例如:

代码如下:

echo -e 1\\\\t2

echo -ne 1\\\\n2

篇4:linux shell实现守护进程脚本

这篇文章主要介绍了linux shell实现守护进程脚本,非常简单实用的代码,这里推荐给小伙伴,希望大家能够喜欢。

嵌入式初学者,第一次上传代码。昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢?

#! /bin/sh#进程名字可修改PRO_NAME=udhcpcWLAN=ra0 while true ; do # 用ps获取$PRO_NAME进程数量 NUM=`ps aux | grep ${PRO_NAME} | grep -v grep |wc -l`# echo $NUM# 少于1,重启进程 if [ “${NUM}” -lt “1” ];then echo “${PRO_NAME} was killed” ${PRO_NAME} -i ${WLAN}# 大于1,杀掉所有进程,重启 elif [ “${NUM}” -gt “1” ];then echo “more than 1 ${PRO_NAME},killall ${PRO_NAME}” killall -9 $PRO_NAME ${PRO_NAME} -i ${WLAN} fi# kill僵尸进程 NUM_STAT=`ps aux | grep ${PRO_NAME} | grep T | grep -v grep | wc -l` if [ “${NUM_STAT}” -gt “0” ];then killall -9 ${PRO_NAME} ${PRO_NAME} -i ${WLAN} fidone exit 0

以上所述就是本文的全部内容了,希望能够对大家熟悉linux shell脚本有所帮助,

篇5:Linux Shell脚本实现检测tomcat

这篇文章主要介绍了Linux Shell脚本实现检测tomcat的方法,推荐给小伙伴们,需要的朋友可以参考下

Linux Shell脚本检测tomcat并自动重启

后台运行命令 sh xxx.sh &

查看后台任务:jobs

召唤到前台:fg jobs编号

可以删掉while循环的代码放到crontab里面定时执行,可以将脚本直接后台运行,

#!/bin/bashwhile [ true ]do url=“www.jb51.net/”; httpOK=`curl --connect-timeout 10 -m 60 --head --silent $url | awk ‘NR==1{print $2}‘`; if [ $httpOK == “200” ];then tomcat6=`ps -ef | grep tomcat | awk ‘NR==1{print $1“ ”$2;}‘`; user=`echo $tomcat6 | awk ‘NR==1{print $1}‘`; pid=`echo $tomcat6 | awk ‘NR==1{print $2}‘`; if [ $user != “tomcat” ]; thenservice tomcat6 start; elsekill -9 $pid;sleep 5s;service tomcat6 start;service tomcat6 start;service tomcat6 status; fi; fi; sleep 5m;done;

以上所述就是本文的全部内容了,希望大家能够喜欢,

Linux Shell脚本实现检测tomcat

篇6:Linux shell脚本实现CPU预警

这篇文章主要介绍了Linux shell脚本实现CPU预警的方法,并附上代码以及用法,有需要的小伙伴可以参考下,

如果CPU占用率持续达到80以上则调用打印java线程占用率堆栈的脚本,见github.com/oldratlee/useful-shells/blob/master/show-busy-java-threads.sh,具体用法见他的github wiki!

#!/bin/bash#cpu idle percentcpu_idle=`top -b -d 1 -n 2 | grep Cpu | awk ‘NR>1{print $5}‘ | cut -f 1 -d “.”` if [ -d “/opt/scripts/log” ]then cd /opt/scriptselse mkdir /opt/scripts/logfi count=0condition=truewhile conditiondo if [ $cpu_idle -le 20 ] thenpids=`top -b -d 1 -n 1 | grep java | awk ‘{if($9 >80) print $1}‘`for ((a = 1; a < 10; a++))do for pid in $pids doi #involve jdk existence check later date=`date +%Y%m%d%H%M` sh showstack.sh -c 30 -p $pid >log/stack_$pid_$date.log jstat -gcutil $pid >log/gc_$pid_$date.log donedonefor pid in $pidsdo date=`date +%Y%m%d%H%M` jmap -heap $pid >log/heap_$pid_$date.logdonecount++cpu_idle=`top -b -d 1 -n 2 | grep Cpu | awk ‘NR>1{print $5}‘ | cut -f 1 -d “.”`if [ $count -ge 3]then #send emaili #server ip address ip=`ifconfig eth0 | grep “inet addr” | cut -f 2 -d “:” | cut -f 1 -d “ ”` condition=false count=0fi elsecondition=falsecount=0 fidone

以上所述就是本文给大家分享的全部内容了,希望大家能够喜欢,

shell脚本学习

监控Oracle数据库的常用shell脚本数据库

Shell脚本中判断变量为数字的3种方法

脚本范文

SHELL病毒简介

下载Shell脚本实现ftok函数(精选6篇)
Shell脚本实现ftok函数.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
点击下载本文文档