以下是小编帮大家整理的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
以上所述就是本文给大家分享的全部内容了,希望大家能够喜欢,
- 影视广告分镜头脚本2024-07-06
- Shell常用操作符总结2023-03-07
- 壳牌Shell笔试经验谈2022-12-19
- Authorware:函数2022-12-13
- 服装宣传片脚本范文2022-12-12
- 大学宣传片脚本范文2023-01-28
- Shell Company 笔试考题目2025-01-27
- 实现的近义词2025-01-10
- 人性化的盗cookie脚本脚本安全2025-04-23
- 函数极限证明2023-12-13