常用linux shell脚本记录
遍历目录下所有的文件是目录还是文件
for file in ./*
do
if test -f $file
then
echo $file 是文件
fi
if test -d $file
then
echo $file 是目录
fi
done
filelist=`ls ./proto`
echo $filelist for file in $filelist;do
#不能有判断if [-f $file ] ,为什么?因为文件是在当前目录的proto目录下,我们filelist输出的是文件列表,没有带路径,-f x.proto x.proto不在当前目录,肯定为false,if永远为假,加上路径才能为true,if [ -f ./proto/$file ];then 这样就可以了。 #protoc -I=proto --cpp_out=cpp/ proto/ClientGate.proto
protoc -I=proto --cpp_out=cpp/ proto/$file # protoc -I=proto -olua/$(basename $file .proto).pb proto/$file done ~
~ protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
在shell中的case结构与C/C++中的switch结构是相同的. 它允许通过判断来选择代码块中多条路径中的一条. 它的作用和多个if/then/else语句的作用相同, 是它们的简化结构, 特别适用于创建菜单.
case "$variable" in "$condition1" )
command...
;; "$condition2" )
command...
;; esac
Note
对变量使用""并不是强制的, 因为不会发生单词分割. 
        *
每句测试行, 都以右小括号)来结尾. 
        *
每个条件判断语句块都以一对分号结尾 ;;. 
        *
case块以esac (case的反向拼写)结尾.
#!/bin/sh case $ in
start|begin)
echo "start something"
;;
stop)
echo "stop !!"
;; *)
echo "ignorant"
;; esac
shell中函数调用
#!/bin/bash function LoopPrint()
{
count=;
while [ $count -lt $ ];
do
echo $count;
sleep
let ++count; 、、这里不能是++$count,否则无穷循环
done
return ;
} read -p "please input the times of print:" n;
LoopPrint $n;
特别注意,传递参数时,(这个例子中)一定要写成LoopPrint $n;而不能写成LoopPrint n。为什么?例如你输入的是20,则n的值($n)为20,前者表示的是把n的值,即20传递给函数LoopPrint,而后者则表示把字符n传递给函数LoopPrint。这点与在静态语言中的函数参数传递是很不同的,因为在Shell中变量的使用并不需要先定义,所以要使用变量,让Shell知道它是一个变量,并要传递它的值时,就是用$n,而不能直接用n,否则只把n当作一个字符来处理,而不是一个变量。c
Linux常用Shell脚本珍藏
shell字符串拼接
对于变量或者字符串的连接,shell提供了相当简单的做法
直接放到一起或用双引号即可。
例如$a, $b,有
c=$a$b
c=$a"xyz"$b
c=$a$b.txt
如果想要在变量后面添加一个字符,可以用一下方法:
$value1=home
$value2=${value1}"="
echo $value2
把要添加的字符串变量添加{},并且需要把$放到外面。
这样输出的结果是:home=,也就是说连接成功。
又如:
[root@localhost sh]# var1=/etc/
[root@localhost sh]# var2=yum.repos.d/
[root@localhost sh]# var3=${var1}${var2}
[root@localhost sh]# echo $var3
/etc/yum.repos.d/
function restart() {
    cd $1
    if [ ! -e *.conf  ]
    then
        echo "no config file"
        return
    fi
    if [ -e server.pid  ]; then
        pid=`cat server.pid`
        echo "kill pid=$pid"
        kill $pid
        while true
        do
            oldpid=`ps -ef|grep $1|grep $pid`;
            if [ $oldpid" " == $pid" " ]; then
                echo $oldpid" "$pid
                sleep 1
            else
                break
            fi
        done
        ../daeml ./$1
    else
        ../daeml ./$1
    fi
}
case $1 in
    login_server)
        restart $1
        ;;
    msg_server)
        restart $1
        ;;
    route_server)
        restart $1
        ;;
    http_msg_server)
        restart $1
        ;;
    file_server)
        restart $1
        ;;
  push_server)
    restart $1
    ;;
  db_proxy_server)
  restart $1
  ;;
    *)
        echo "Usage: "
        echo "  ./restart.sh (login_server|msg_server|route_server|http_msg_server|file_server|push_server)"
        ;;
esac
# tool
red=31
green=32
yellow=33
blue=34
echoColor() {
    local color=$1
    shift
    echo -e "\033[${color}m$@\033[m"
}
process_count=`ps -ef |grep -v grep | grep "xxx" | wc -l`
	if [ $process_count == $arr_len ]
	then 
		echoColor $green "start all process success.:) "
	else 
		echoColor $red  "start all   Failed!!  "
	fi
#kill 所有的带有AAAA的游戏进程
	ps -ef |grep -v grep | grep "AAAA" |awk '{print $2}'|xargs kill -9
linux shell 获取当前正在执行脚本的绝对路径
basepath=$(cd `dirname $0`; pwd)
在此解释下basepath :
dirname $0,取得当前执行的脚本文件的父目录 cd `dirname $0`,进入这个目录(切换当前工作目录) pwd,显示当前工作目录(cd执行后的)
由此,我们获得了当前正在执行的脚本的存放路径。
【`】,学名叫“倒引号”, 如果被“倒引号”括起来,  表示里面需要执行的是命令。
比如 `dirname $0`,  就表示需要执行   dirname $0  这个命令
【“”】 , 被双引号括起来的内容, 里面 出现  $ (美元号: 表示取变量名)  `(倒引号: 表示执行命令)   \(转义号: 表示转义),   其余的才表示字符串。
【’‘】,  被单引号括起来的内容, 里面所有的都表示串, 包括上面所说的  三个特殊字符。
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。
这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
$0:当前Shell程序的文件名
dirname $0,获取当前Shell程序的路径
cd `dirname $0`,进入当前Shell程序的目录
Linux脚本下倒引号(`)与$()
一、倒引号(`)在Linux的作用
倒引号(`)在Linux中就是将倒引号内的Linux命令先执行,然后将执行结果赋予变量。
二、$()的作用
$()和 ` `:
在 bash shell 中,$( ) 与` ` (倒引号) 都是用来做命令替换用(commandsubstitution)的。
例如 version=$(uname -r)和version=uname -r都可以是version得到内核的版本号
各自的优缺点:
1. 倒引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。但反单引号容易打错或看错。
2. $()并不是所有shell都支持。
---------------------
一、dirname指令
1、功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
2、用法:dirname filename
例如下面几个例子
(1)# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
 
二、basename指令
1、功能:从给定的包含绝对路径的文件名中去除左边目录部分或者同时去除某个后缀的内容(目录的部分),然后返回剩下的部分(非目录的部分)
$():这个小括号里放的是命令,和``反引号作用一样,执行这个命令
${}:这里面放的是变量,用来引用的
${ }变量替换
一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
exp 1
[root@localhost ~]# A=Linux
[root@localhost ~]# echo $AB #表示变量AB [root@localhost ~]# echo ${A}B #表示变量A后连接着B
LinuxB
几种特殊的替换结构
| 
 1 
 | 
${var:-string},${var:+string},${var:=string},${var:?string} | 
  ①${var:-string}和${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
  ② ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的)
  ③${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。
补充扩展:在上面这五种替换结构中string不一定是常值的,可用另外一个变量的值或是一种命令的输出。、、、、
常用linux shell脚本记录的更多相关文章
- 10个实战及面试常用Linux Shell脚本编写
		
来自:http://blog.51cto.com/lizhenliang/1929044 注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规 ...
 - Linux Shell 高级编程技巧4----几个常用的shell脚本例子
		
4.几个常用的shell脚本例子 4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释 4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...
 - 【转】常用的shell脚本
		
from:http://blog.sina.com.cn/s/blog_4152a9f501013r6c.html 常用的shell脚本 (2012-10-10 22:09:07) 转载▼ 标签: 杂 ...
 - Linux Shell脚本入门--wget 命令用法详解
		
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
 - linux shell 脚本攻略学习20--awk命令入门详解
		
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
 - linux shell脚本攻略笔记
		
前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符 echo -e "\e[1:41m" 1表示背景色 2 ...
 - LINUX SHELL脚本攻略笔记[速查]
		
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
 - Linux shell脚本编程(一)
		
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
 - Linux Shell脚本攻略
		
-Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...
 
随机推荐
- 上千万或上亿数据(有反复),统计当中出现次数最多的N个数据.  C++实现
			
上千万或上亿的数据,如今的机器的内存应该能存下.所以考虑採用hash_map/搜索二叉树/红黑树等来进行统计次数. 然后就是取出前N个出现次数最多的数据了,能够用第2题提到的堆机制完毕. #inclu ...
 - POJ 1661 Help Jimmy(递推DP)
			
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
 - JS常用函数与方法
			
//当页面关闭时触发 window.onbeforeunload = function() { alert('关闭了吧'); } //关闭窗口(弹出式窗口) parent.window.close() ...
 - 【转】实现Ribbon风格的窗体
			
随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的. 首先,Delph ...
 - LeetCode——Contains Duplicate II
			
Description: Given an array of integers and an integer k, find out whether there there are two disti ...
 - C#IIS网站应用程序池启动回收停止 .
			
//添加应用程序池空间引用using System.DirectoryServices;using System.Text; using System.Text.RegularExpressions; ...
 - 【BZOJ4372】烁烁的游戏 动态树分治+线段树
			
[BZOJ4372]烁烁的游戏 Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距 ...
 - Android动态加载ListView中的Item
			
我这周上网看到动态增加listview的每一项item的布局,今天抽空自己写了一个,方便自己日后使用,这个效果还是很不错的,用到了Adapter的notifyDataSetChanged()方法,当点 ...
 - java启动3个线程轮流打印数字
			
转自:http://blog.csdn.net/u014011112/article/details/50988769 http://blog.csdn.net/perrywork/article/d ...
 - 基础概念 之 Spark on Yarn
			
先抛出问题:Spark on Yarn有cluster和client两种模式,它们有什么区别? 用Jupyter写Spark时,只能使用client模式,为什么? 写一篇文章,搞清楚 Spark on ...