这并不是教人怎么进行shell编程的文章,只是韦哥在工作中用到的一些简单脚本的写法。因为有些命令即使用过几次了,再次使用时仍然写不对,需要man来看下或者需要google,你也可以理解为对命令的理解不深造成,但韦哥懒得花精力去深究一些命令了,还不如在这里记下它们的用法,到需要再次使用时,打开自己博客进行程序猿们最擅长的ctrl+c操作就OK了。以后有更多积累时,会不断更新这篇文章。如要看更多组织结构良好内容更丰富的范例,推荐参考牛人吴章金的《Shell编程范例序列》。

1. 找到文件iscsi.conf中字符串“<SCSIid>”所在的行号:

line_num=`cat iscsi.conf|awk '/<SCSIid>/{print NR;}'`   # 所在行号

line_num=$(($line_num+1))                                          # 下一行行号,这里加1的写法

2. case分支写法,判断server_type是否为“master”或“slave”:

case $server_type in

"master")



              ;;

"slave")



             ;;

          *)        # 相当于default,所有其它的情况

               echo "Error server type"

               exit 1

           ;;

esac

3. 往/etc/hosts文件中添加一行,至于干什么你应该知道了:

sed -i "$ a 192.168.1.1 tftp_server" /etc/hosts

4. 从服务器repo目录下载后缀名为.repo的文件,不下载其父目录的内容,下载后放在当前文件夹下,不创建新的文件夹:

wget -r -nd --no-parent http://$tftp_server/repo/ -A repo

5. 生成admin-openrc.sh文件并添加指定内容“export OS_USERNAME=admin”:

cat >> admin-openrc.sh << EOF

export OS_USERNAME=admin

EOF

6. 安装mariadb-server-5.5会弹框要求输入root密码,用脚本自动化安装,无需手动输入:

debconf-set-selections <<< "mariadb-server-5.5 mysql-server/root_password password $MYSQL_PASS"

debconf-set-selections <<< "mariadb-server-5.5 mysql-server/root_password_again password $MYSQL_PASS"

apt-get -y install mariadb-server-5.5 python-mysqldb   # 这回不会弹框框了

7. 将change_mysql_password.sql文件中的newpassword替换为MYSQL_PASS变量的内容,然后将该脚本文件导入mysql执行文件里面的命令:

sed -i "s/newpassword/$MYSQL_PASS/g" ./change_mysql_password.sql

debian_sys_pass=`cat /etc/mysql/debian.cnf |grep password|awk '{print $3}'|awk 'NR==1{print;}'`

mysql -udebian-sys-maint -p"$debian_sys_pass" < change_mysql_password.sql

8. 改变目录属性:

chown -R swift:swift /etc/swift  # 递归将/etc/swift目录及子目录所属的用户和组改为swift

chgrp swift /etc/swift                # 将/etc/swift目录所属组改为swift

9. 获取eth0的MAC地址:

HWADDR=$(/sbin/ifconfig eth0|egrep -o "([[:xdigit:]]{2}[:]){5}[[:xdigit:]]{2}")

10. 判断传递给脚本的参数个数:

if [ ! $# -eq 2 ]

  then

    echo "Two arguments needed!"

    exit

fi

11. 递归将当前目录下文件中字符串“old”替换为“new”:

grep -rI old *|awk '{split($1, c,":");print c[1];}'|xargs sed -i "s/old/new/g"

12. 判断是否为偶数:

if (($index%2 != 0))

then

fi

13. 去掉字符串str最后一个字符:

str=`echo ${str%?}`

14. 循环一个列表,MAC_LIST由多个行组成:

for macaddr in $(echo $MAC_LIST | awk '{print;}')

do

done

15. while循环:

while [ $i -lt 3 ]  # 当i小于3时循环

do

done

16. 设置当前进程及其子进程的IO优先级:

ionice -c3 -p$$

17. 判断字符串str为空:

if [ -z "$str" ]

then

fi

18. for循环:

for ((i=1; i<10; i++))  # i小于10时循环

do

done

19. 判断/dev/my_dev是否为块设备:

if [ -b "/dev/my_dev" ]

then

     break

fi

20. 将文件描述符9和文件/tmp/snapshot.lock关联起来:

exec 9>/tmp/snapshot.lock

21. 在文件/etc/rc.local文件第10行后添加“sleep 2”:

sed -i '10a sleep 2' /etc/rc.local

22. 判断/www/blank是否是一个目录:

if [ ! -d /www/blank ]

then

fi

23. 删除文件/etc/rc.local中包含“firstboot_task.sh”字符串的行:

sed -i '/firstboot_task.sh/d'  /etc/rc.local

常用shell命令的写法的更多相关文章

  1. Windows常用shell命令大全

    Windows常用shell命令大全 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而非鼠 ...

  2. Linux Shell常用shell命令

    Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...

  3. Ubuntu常用shell命令

    目录 ls cd mkdir mv cp scp rm df du chmod chown chgrp head tail screen apt-get Ubuntu常用shell命令 Ubuntu作 ...

  4. Windows常用shell命令大全(转)

    [Windows常用shell命令大全] 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而 ...

  5. 原 HBase 常用Shell命令

    HBase 常用Shell命令 1.进入hbase shell console $HBASE_HOME/bin/hbase shell 如果有kerberos认证,需要事先使用相应的keytab进行一 ...

  6. HBase 安装与配置及常用Shell命令

    HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...

  7. 常用shell命令中你所不熟悉的参数

    1.   ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. ls –a Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除 ...

  8. Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

    今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...

  9. Mac下的常用Shell命令

    今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...

随机推荐

  1. 【02】你是如何理解 HTML 语义化的,有什么好处

    [02]你是如何理解 HTML 语义化的   01,语义化,就是通过HTML标签来表示页面包含的信息. 02,其中有HTML标签的语义化和CSS命名的语义化. 03,HTML标签语义化的的含义是:   ...

  2. Python第三方库之openpyxl(11)

    Python第三方库之openpyxl(11) Stock Charts(股票图) 在工作表上按特定顺序排列的列或行中的数据可以在股票图表中绘制.正如其名称所暗示的,股票图表通常被用来说明股价的波动. ...

  3. BNUOJ 19297 Code Refactoring

    Code Refactoring Time Limit: 3000ms Memory Limit: 131072KB   This problem will be judged on UVA. Ori ...

  4. Leetcode 407.接雨水

    接雨水 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高度都大于0 且小 ...

  5. 【JavaScript 7—基础知识点】:BOM

    一.基础知识 1.1,什么是BOM BOM(browser object model):也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM缺少规范,每个浏览器提供商又按照自己想法去扩展 ...

  6. SPOJ - Distinct Substrings,求不同的字串个数!

    DISUBSTR - Distinct Substrings 题意:给你一个长度最多1000的字符串,求不相同的字串的个数. 思路:一个长度为n的字符串最多有(n+1)*n/2个,而height数组已 ...

  7. 集群高可用之lvs+keepalive

    集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...

  8. 【转】Eric's并发用户数估算与Little定律的等价性

    转自:http://www.cnblogs.com/hundredsofyears/p/3360305.html 在国内性能测试的领域有一篇几乎被奉为大牛之作的经典文章,一个名叫Eric Man Wo ...

  9. BZOJ 4822 [Cqoi2017]老C的任务 ——树状数组

    直接离散化之后用树状数组扫一遍. 把每一个询问拆成四个就可以做了. %Silvernebula 怒写KD-Tree #include <map> #include <cmath> ...

  10. BZOJ 1043 [HAOI2008]下落的圆盘 ——计算几何

    倒着考虑,加入一个圆,判断和前面有没有完全覆盖的情况. 如果没有,和圆盘一一取交集,然后计算它们的并集,然后计算即可. #include <map> #include <cmath& ...