菜单

shell函数

2018年12月18日 - LINUX

shell函数

shell函数

何以而动用shell函数

linux其余的用意

  1. [root@lamp ~]# alias

  2. alias cp=’cp -i’

  3. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias vi=’vim’

  6. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

安别名与利用

  1. [root@lamp ~]# alias cdone=’cd /’
  1. [root@lamp ~]# alias

  2. alias cdone=’cd /’

  3. alias cp=’cp -i’

  4. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias vi=’vim’

  6. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

  7. [root@lamp ~]# cdone

  8. [root@lamp /]# pwd

  9. /

函数也是怀有跟别名类似之功用。函数的打算就是是把程序里往往调研相同之代码有概念成一卖,然后也当时等同客代码起个名,另外具有的重新调用这一部分代码都只用调用那么些名字就可。当需要修改就有些再代码时,只需要改变函数体内的一样卖代码即可兑现调用修改。

运函数的优势:

1、把同的顺序段定义成函数,可以抽整个程序的代码量。

2、扩大程序的可读性,以及便于管理。

3、可实现程序效用模块化,不同的程序用函数模块化。

4、让程序代码结构还显然。

死循环

whlie :
do
    语句体
done

shell函数语法

语法格式:

  1. 简单易行语法格式

  2. 函数名(){

  3.   指令…

  4.   return n

  5. }

  6. 专业语法格式

  7. function 函数名(){

  8.   指令…

  9.   return n

  10. }

专注:shell的再次回到值是exit,函数里之所以return输出重回值。

shell函数

  1. 咦时用到函数
  • 履行的效率看似
  • 依照实际需要 ,举办设置
  1. shell函数定义格式
function 函数名()
{

}
  1. 调用shell函数
  • 函数名
  1. 函数参数传递
function test()
{
    echo "$0"
    echo "$1"
    echo "$2"
    echo "${10}"
    echo "hello worid"
}
test 1 2 3 4 5 6 7 8 9 34
  • 分析:当参数作为shell函数传递时,当当函数里面接收n>=10个参数时,要长${n};
  • $0不是test,而是shell文件本身
  • 函数里面的$1与函数外面的$1不同等,可是函数里面的$0与函数外面的$0相同
function sum()
{
    num1=$1
    num2=$2
    let value=num1+num2
    return $value
}
sum 1 2
echo "sum=$?"
sum 2 3
echo "sum=$?"
  • 结果为: sum=3,sum=5
  1. 分析:函数如果是return出来的结果,我们因此$?接收,$?是接受最终运行的平等不成下本.
  2. 假使return前边的值>255,那么函数运行了事后用$?接收,$?=value%256
  3. 怎么接收return出来的值相比255坏?问题解决之道:使用echo重返出来,函数外以变量接收,value=
    函数名,从而value举办操作
  4. 实际上echo是现保存函数的结果集
function test()
{
    echo 513
}
value=`test`
echo "test函数的返回值${value}"
  • shell函数统计:
  1. function函数可写但是免写
  2. shell 函数可以有return,也得以无return
  3. 淌倘诺return出来的结果要使就此$?接收
  4. 设假诺echo保存的结果集,必须使就此value=test获结果收到
  5. 函数里面可以嵌套,可以内嵌创设函数
a()
{
  b()
  {

  }

  b

}
a

a()
{

  b()
  {
    echo "==b=="
  }
  b

}
a

a()
{

  b()
  {
    echo "==b=="
  }


}
a
b

6.尺度函数

a()
{
  value=9
  if [ $value -eq 9 ]
  then
  b()
  {
    echo "==b=="
  }
  else
  c()
  {
    echo "==c=="
  }

}
a
b
  • 结果为==b==
  • 浅析:函数b和函数c在什么意况下好调用?
    先运行函数a,因为a中暴发函数b和c的兑现.在if条件建立即,实现函数b的定义,其他情状下,实现函数c的概念

shell函数的举办

调用函数

1)直接执行函数称作即可(不带来括号)。

函数名

留意:1、执行函数时,函数后的小括号不待。2、函数定义和函数体必须于苟举办的函数叫做的面前定义,shell的行从上到下按行执行。

2)带参数的函数执行形式。

函数名 参数1 参数2

注意:函数的传参腔戏本的传参类似,只是本子名换成函数称作即可。

函数后接的参数表达:1、shell的岗位参数($1、$2、$3、$4、$5、$#、$*、$?、$@)都得是函数的参数。2、此时父脚本的参数临时地为函数参数所挂或躲藏。3、$0相比较出色,它依然是父脚本的名。4、当函数完成时,原来的吩咐行脚本的参数就恢复生机。5、在shell函数里面,return命令效用跟shell里的exit类似,功能是跳出函数。6、在shell函数体里使用exit会退出整个shell脚本,而休是退出shell函数。7、return语句会重返一个脱离值(重临值)给调用函数的先后。8、函数的参数变量是于函数体里面定义,假若是层见迭出变量,一般下local
i定义。

shell函数范例

付出脚论起两单简易函数并调用执行。

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. test_fun(){

  4.   echo “i
    am shell fun.”

  5. }

  6. test_fun

  7. [root@lamp /]# sh fun01.sh

  8. i am shell fun.

调用另外脚本文件被的函数。

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. . /fun02.sh

  4. test_fun(){

  5.   echo “i
    am shell fun.”

  6. }

  7. test_fun

  8. test_fun02

  9. [root@lamp /]# cat fun02.sh

  10. #!/bin/bash

  11. test_fun02(){

  12.   echo “i
    am shell fun02.”

  13. }

  14. [root@lamp /]# sh fun01.sh

  15. i am shell fun.

  16. i am shell fun02.

传参

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. . /fun02.sh

  4. test_fun(){

  5.   echo “i
    am shell fun.”

  6. }

  7. test_fun

  8. test_fun02 $1

  9. [root@lamp /]# cat fun02.sh

  10. #!/bin/bash

  11. test_fun02(){

  12.   echo “i
    am shell $1.”

  13. }

  14. [root@lamp /]# sh fun01.sh golden

  1. i am shell fun.

  2. i am shell golden.

函数传参转成参数命令行传输,对随意指定url判断是否很。

  1. [root@lamp /]# curl -I -m 3 -o
    /dev/null -s -w %{http_code}
    www.baidu.com

-I 仅测试HTTP头

-m 3 最多询问3秒

-o /dev/null 屏蔽原有输出音信

-s silent 情势,不出口任何东西

-w %{http_code} 控制额外输出

  1. [root@lamp ~]# cat check_url.sh
  1. #!/bin/bash

  2. [ -f /etc/init.d/functions ]&& .
    /etc/init.d/functions

  3. usage(){

  4.   echo “USAGE:$0 url.”

  5.   exit 1

  6. }

  7. RETVAL=0

  8. check(){

  9.   wget -I 10 –spider -t 2 $1
    &>/dev/null

  10.   RETVAL=$?

  11.   if
    [ $RETVAL -eq 0 ];then

  12.     action “$1 url” /bin/true

  13.   else

  1.     action “$1 url” /bin/false

  2.   fi

  3.   return $RETVAL

  4. }

  5. main(){

  6.   if
    [ $# -ne 1 ];then

  7.     usage

  8.   fi

  9.   check $1

  10. }

  11. main $*

  12. [root@lamp ~]# sh check_url.sh
    www.baidu.com

  13. www.baidu.com url [ OK ]

  14. [root@lamp ~]# sh check_url.sh
    www.baiduxxxx.com

  15. www.baiduxxxx.com url [FAILED]

让字符串加颜色。

  1. [root@lamp ~]# cat color.sh

  2. #!/bin/bash

  3. RED_COLOR=’\E[1;31m’

  4. GREEN_COLOR=’\E[1;32m’

  5. YELLOW_COLOR=’\E[1;33m’

  6. BLUE_COLOR=’\E[1;34m’

  7. PINK=’\E[1;35m’

  8. RES=’\E[0m’

  9. echo -e “$RED_COLOR red $RES”

  10. echo -e “$GREEN_COLOR GREEN $RES”

  11. echo -e “$YELLOW_COLOR YELLOW $RES”

  12. echo -e “$BLUE_COLOR BLUE $RES”

  13. echo -e “$PINK PINK $RES”

出口结果。

图片 1

传2独参数,颜色名称以及情节,输出带颜色之内容。

  1. [root@lamp ~]# cat color_str.sh
  1. #!/bin/bash

  2. RED=’\E[1;31m’

  3. GREEN=’\E[1;32m’

  4. YELLOW=’\E[1;33m’

  5. BLUE=’\E[1;34m’

  6. PINK=’\E[1;35m’

  7. RES=’\E[0m’

  8. usage(){

  9.   echo “USAGE:$0 color contents.”

  10.   exit 1

  11. }

  12. color(){

  13.   if
    [ “$1” = “red” ];then

  14.     echo -e “${RED}$2 $RES”

  15.   elif [ “$1” = “green” ];then

  16.     echo -e “${GREEN}$2 $RES”

  17.   elif [ $1 = “yellow” ];then

  18.     echo -e “${YELLOW}$2 $RES”

  19.   elif [ “$1” = “blue” ];then

  20.     echo -e “${BLUE}$2 $RES”

  21.   elif [ “$1” = “pink” ];then

  22.     echo -e “${PINK}$2 $RES”

  23.   else

  1.     echo “$2”

  2.   fi

  3. }

  4. main(){

  5.   if
    [ $# -ne 2 ];then

  6.     usage

  7.   fi

  8.   color $1 $2

  9. }

  10. main $*

出口结果。

图片 2

case结构条件语句

case结构条件语句语法

case语句子实在就专业之大都分if语句。

  1. case
    “字符串变量” in

  2.   值1) 指令1…

  3. ;;

  4.   值2) 指令2…

  5. ;;

  6.   *) 指令3…

  7. esac

case结构条件语句范例

冲用户的输入判断是何许人也数字。要是用户输入数字输出对许输入的数字,假诺是外情节再次来到不科学。

  1. [root@lamp ~]# cat case.sh

  2. #!/bin/bash

  3. usage(){

  4.   echo “USAGE:$0 number.”

  5.   exit 1

  6. }

  7. case_fun(){

  8.   case
    $1 in

  9.     [1-3])

  10.       echo $1

  11.   ;;

  12.     *)

  13.       echo “input error.”

  14.   esac

  15. }

  16. main(){

  17.   case
    $# in

  18.     1) case_fun $1

  19.   ;;

  20.     *) usage

  21.   esac

  22. }

  23. main $*

出口结果。

  1. [root@lamp ~]# sh case.sh

  2. USAGE:case.sh number.

  3. [root@lamp ~]# sh case.sh 1

  4. 1

  5. [root@lamp ~]# sh case.sh 2

  6. 2

  7. [root@lamp ~]# sh case.sh 3

  8. 3

  9. [root@lamp ~]# sh case.sh 4

  10. input error.

举办脚本打印一个水果菜单:

1、apple

2、pear

3、banana

4、cherry

当用户选拔水果之早晚,打印选取水果是呀,并吃水果单词加上颜色。

  1. [root@lamp ~]# cat fruit.sh

  2. #!/bin/bash

  3. RED=’\E[1;31m’

  4. GREEN=’\E[1;32m’

  5. YELLOW=’\E[1;33m’

  6. BLUE=’\E[1;34m’

  7. PINK=’\E[1;35m’

  8. RES=’\E[0m’

  9. FLICKER=’\E[31;5m’

  10. usage(){

  11.   echo -e “${FLICKER}Pls select the exist num behind.
    ${RES}”

  12.   exit 1

  13. }

  14. choice(){

  15.   case
    $num in

  16.     1) echo -e “${BLUE}apple${RES}”

  17.   ;;

  18.     2) echo -e “${GREEN}pear${RES}”

  19.   ;;

  20.     3) echo -e “${YELLOW}banana${RES}”

  21.   ;;

  22.     4) echo -e “${RED}cherry${RES}”

  23.   ;;

  24.     *) usage

  25.   esac

  26. }

  27. main(){

  28.   choice $num

  29. }

  30. echo ”

  31.   1、apple

  32.   2、pear

  33.   3、banana

  34.   4、cherry”

  35. read -t 10 -p “Pls input a num:” num

  36. main $num

echo输出字符串显示不同颜色。

  1. [root@lamp ~]# echo -e “\033[30m 黑色 \033[0m”

  2. [root@lamp ~]# echo -e “\033[31m 红色 \033[0m”

  3. [root@lamp ~]# echo -e “\033[32m 绿色 \033[0m”

  4. [root@lamp ~]# echo -e “\033[33m 黄色 \033[0m”

  5. [root@lamp ~]# echo -e “\033[34m 蓝色 \033[0m”

  6. [root@lamp ~]# echo -e “\033[35m 紫色 \033[0m”

  7. [root@lamp ~]# echo -e “\033[36m 天蓝色 \033[0m”

  8. [root@lamp ~]# echo -e “\033[37m 白色 \033[0m”

图片 3

  1. [root@lamp ~]# echo -e “\033[40;37m 黑底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[41;37m 红底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[42;37m 绿的白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[43;37m 黄底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[44;37m 蓝底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[45;37m 紫底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[46;37m 天蓝底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[47;30m 白底黑字 \033[0m”

图片 4

双重多字颜色跟背景观查看:man console_codes

nginx启动脚本。

  1. [root@lamp ~]# cat nginx_control.sh
  1. #!/bin/bash

  2. [ -f /etc/init.d/functions ] && .
    /etc/init.d/functions

  3. nginx=/application/nginx/sbin/nginx

  1. profile=/application/nginx/logs/nginx.pid
  1. state() {

  2.   RETVAL=$?

  3.   if
    [ $RETVAL -eq 0 ];then

  4.     action “Nginx is $1” /bin/true

  5.   else

  1.     action “Nginx is $1” /bin/false

  2.   fi

  3.   return $RETVAL

  4. }

  5. start() {

  6.   if
    [ -f $pidfile ];then

  7.     echo “Nginx is running”

  8.   else

  1.     $nginx

  2.     RETVAL=$?

  3.     state started

  4.   fi

  5.   return $RETVAL

  6. }

  7. stop() {

  8.   if
    [ ! -f $pidfile ];then

  9.     echo “nginx is not running.”

  10.   else

  1.     $nginx -s stop

  2.     state stoped

  3.   fi

  4.   return $RETVAL

  5. }

  6. reload() {

  7.   if
    [ -f $pidfile ];then

  8.     echo “Can’t open $pidfile,no such file or
    directory.”

  9.   else

  1.     $nginx -s reload

  2.     state reload

  3.   fi

  4.   return $RETVAL

  5. }

  6. case
    “$1” in

  7.   start)

  8.     start

  9.     RETVAL=$?

  10.     ;;

  11.   stop)

  12.     stop

  13.     RETVAL=$?

  14.     ;;

  15.   restart)

  16.     stop

  17.     sleep 2

  18.     restart

  19.     RETVAL=$?

  20.     ;;

  21.   reload)

  22.     reload

  23.     RETVAL=$?

  24.     ;;

  25.   *)

  26.     echo “USAGE:$0 {start|stop|reload|restart}”

  1. esac

  2. exit $RETVAL

case总结:

1、case语句就一定给多支的if语句。case语句优势是还标准、易读。

2、case语句适合变量的价少,且为稳定的数字要字符串集合。(start、stop、restart)。

3、系统服务启动脚本传参的论断多用case语句。

当型循环和直到型循环

while循环工作着行使的非多,一般是守护进程程序要镇循环执行场景,其余循环总结,都相会为此for替换while。

当型和直到型循环语句

1、while条件句

语法:

  1. while
    条件

  2.   do

  1.   指令 …

  2. done

2、until条件句

语法:

  1. until 条件

  2.   do

  1.   指令 …

  2. done

任由条件是否创造都晤面实施同样破。

当型和直到型基本范例

列隔2秒屏幕输出负载值。

  1. [root@lamp ~]# cat while.sh

  2. #!/bin/bash

  3. while
    true

  4.   do

  1.     uptime

  2.     sleep 2

  3.   done

防护客户端执行脚本中断的艺术。

1、sh while.sh &

2、nohup while.sh &

3、screen保持对。

ctl+c:截至实施时剧本或任务

ctrl+z:暂停实施时剧本或任务

bg:把近美剧本或任务放入后台执行

fg:当前剧本或任务举办前台执行,假使发生多单任务,可以fg加任务编号调出

jobs:查看时执行之本子或任务

进程管理命令

bg:后台运行

fg:挂于先后

jobs:显示后台程序

kill、killall、pkill:杀掉进程

crontab:设置定时

ps:查看过程

pstree:突显进程状态树

top:呈现进程

nice:改变优先权

nohup:用户退系统以后连续工作

pgrep:查找匹配原则的长河

strace:跟踪一个过程的系统调用意况(strace + pid)

ltrace:跟踪进程调用库函数的境况

vmstat:报告虚拟内存总括消息

while实现1到100之和。

  1. [root@lamp ~]# cat while_add.sh
  1. #!/bin/bash

  2. i=1

  3. sum=0

  4. while
    [ $i -le 100 ]

  5.   do

  1.     ((sum+=$i))

  2.     ((i++))

  3.   done

  4. echo $sum

留神:在工作中多应用算法,代码执行效率又强。

拔取while循环竖向打印10、9、8…

  1. [root@lamp ~]# cat while_seq.sh
  1. #!/bin/bash

  2. i=10

  3. while
    [ $i -gt 0 ]

  4.   do

  1.     echo “$i”

  2.     ((–i))

  3.   done

手机充值10老大,每发一样不善短信费0.15状元,当前余额小于0.15初次不可知发短信,指示余额不足,请充值,可以允许用户充值后连续发短信。

  1. [root@lamp ~]# cat messages.sh
  1. #!/bin/bash

  2. total=0

  3. menu=’

  4. 1:充值

  5. 2:发送音信

  6. 3:退出

  7. pay(){

  8.   read -t 10 -p “Pls input pay money:” num

  9.   expr ${num} + 1 &>/dev/null

  10.   [ $? -ne 0 ]&&{

  11.     echo “Input error”

  12.     return 1

  13.   }

  14.   if
    [ ${num} -gt 0 ];then

  15.     total=$(( $total + $num * 100 ))

  1.   else
  1.     echo “Input error”

  2.     return 1

  3.   fi

  4. }

  5.  

  6. send(){

  7.   if
    [ ${total} -gt 15 ];then

  8.     echo “send messages is ok.”

  9.     total=$(( $total – 15 ))

  10.   else

  1.     echo “余额不足!”

  2.   fi

  3. }

  4.  

  5. while
    true

  6. do

  1.   echo “当前余额:${total}”

  2.   echo ${menu}

  3.   read -t 10 -p “Pls input a num:” choice

  4.   case
    ${choice} in

  5.     1) pay

  6.     ;;

  7.     2) send

  8.     ;;

  9.     3) exit 0

  10.     ;;

  11.     *)

  12.   esac

  13. done

while按行读取文件的法子。

方式一

  1. exec <FILE

  2. sum=0

  3. while
    read line

  4. do

  1.   cmd

  2. done

方式二

  1. cat ${FILE_PATH} | while read line

  2. do

  1.   cmd

  2. done

方式三

  1. while
    read line

  2. do

  1.   cmd

  2. done<FILE

总括apache一天的日志被所有行的各要素的造访字节数的总和。

  1. [root@lamp ~]# cat log_cmd.sh
  1. #/bin/bash

  2. exec access.log

  3. while
    read line

  4. do

  1.   i=`echo $line|awk ‘{print $10}’`
  1.   expr $i + 1 &>/dev/null

  2.   if
    [ $? -ne 0 ];then

  3.     continue

  4.   fi

  5.   ((sum+=i))

  6. done

  7. [ -n “$sum” ] && echo $sum

while循环小结。

1、while循环的一技之长是行守护进程和我们希望循环不脱持续推行之面貌,用效能低于1分钟的大循环处理,其他的while循环几乎都得让for循环替代。

2、几乎有的case语句都得以就此if语句替换,一般在系统启动脚本传入少量永恒规则字符串,用case语句,其他一般判断多为此if。

3、工作着if和for最常用,其次while(守护进程)和case(服务启动脚本)。

读取一个文件,倒插入一个初的公文,清空原文件。

  1. [root@lamp ~]# cat read_line.sh
  1. #!/bin/bash

  2. file=/root/read.sh

  3. num=`wc -l ${file}|awk -F ‘ ‘ ‘{print
    $1}’`

  4. while
    [ ${num} -gt 0 ]

  5. do

  1.   line=`tail -1 ${file}`

  2.   echo ${line}

  3.   echo
    ${line}>>/root/read_bak.sh

  4.   sed -i ‘$d’ ${file}

  5.   num=`wc -l ${file}|awk -F ‘ ‘
    ‘{print $1}’`

  6. done

for循环结构

for循环结构语法

1、for循环结构

语法

  1. for
    变量名 in 变量取值列表

  2. do

  1.   指令…

  2. done

于这布局中”in 变量取值列表”可略,省略时非常给in $@,使用for
i就卓殊给接纳for i in $@。

2、C语言型for循环结构

语法

  1. for((exp1;exp2;exp3))

  2. do

  1.   指令…

  2. done

for和while对比。

  1. [root@lamp ~]# cat for.sh

  2. #!/bin/bash

  3. for((i=1;i<=5;i++))

  4. do

  1.   echo $i

  2. done

  3.  

  4. [root@lamp ~]# cat while.sh

  5. #!/bin/bash

  6. i=1

  7. while((i<=5))

  8. do

  1.   echo $i

  2.   ((i++))

  3. done

形式一致:直接排有元素的方。

  1. [root@lamp ~]# cat for_02.sh
  1. #!/bin/bash

  2. for i
    in 1 2 3 4 5

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_02.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

办法二:使用大括声泪俱下的道

  1. [root@lamp ~]# cat for_02.sh
  1. #!/bin/bash

  2. for i
    in {1..5}

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_02.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

方三:使用命令结果。

  1. [root@lamp ~]# cat for_03.sh
  1. #!/bin/bash

  2. for i
    in `seq 5`

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_03.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

季号一行显示的优化措施。

  1. [root@lamp ~]# seq 10 >a.log
  1. [root@lamp ~]# cat a.log

  2. 1

  3. 2

  4. 3

  5. 4

  6. 5

  7. 6

  8. 7

  9. 8

  10. 9

  11. 10

  12. [root@lamp ~]# cat a.log|xargs -n4

  1. 1 2 3 4

  2. 5 6 7 8

  3. 9 10

  4. [root@lamp ~]# xargs -n4 <a.log

  1. 1 2 3 4

  2. 5 6 7 8

  3. 9 10

  4. [root@lamp ~]# cat a.log|grep 3

  1. 3

  2. [root@lamp ~]# grep 3 a.log

  3. 3

亮当前路线的兼具文件。

  1. [root@lamp ~]# cat for_04.sh
  1. #!/bin/bash

  2. for i
    in `ls`

  3. do

  1.   echo $i

  2. done

批量变随机文件。

  1. [root@lamp ~]# cat for_05.sh
  1. #!/bin/bash

  2. for((i=1;i<=10;i++))

  3. do

  1.   mkdir -p ./test

  2.   touch ./test/`echo
    $RANDOM|md5sum|cut -c 1-8`_finished.jpg

  3. done

批量化名。

  1. [root@lamp ~]# cat for_06.sh
  1. #!/bin/bash

  2. for i
    in `ls /root/test`

  3. do

  1.   cd /root/test

  2.   mv $i `echo $i|sed
    ‘s#_finished.jpg#.html#g’`

  3. done

 

  1. [root@lamp test]# ls|awk -F ‘[_]’
    ‘{print “mv ” $0,$1″.html”}’|bash

 

  1. [root@lamp test]# rename “_finished.html” “.jpg” *.html

rename “改呀” “改成为何” 对什么人举行改动

清除关闭某服务开机自启动。

  1. [root@lamp test]# chkconfig
    –list|grep 3:on|awk ‘{print $1}’|egrep -v “rsyslog|sshd|systat”|sed -r
    ‘s#(.*)#chkconfig \1 off#g’|bash

for实现1+2+3+…+100。

  1. [root@lamp ~]# cat for_07.sh
  1. #!/bin/bash

  2. for
    ((i=1;i<=100;i++))

  3. do

  1.   ((sum+=$i))

  2. done

  3. echo “sum=${sum}”

 

  1. [root@lamp ~]# cat for_08.sh
  1. #!/bin/bash

  2. for i
    in `seq 100`

  3. do

  1.   let sum+=i

  2. done

  3. echo “sum=${sum}”

算法极其抢。

  1. [root@lamp ~]# echo
    $((100*(100+1)/2))

 

chpasswd批量更新用户口令工具。

起指令文件passwd.txt(格式为[username:passwd])

# vi passwd.txt

username1:passwd1

username2:passwd2

以passwd.txt的内容传输到chpasswd指令来改相应用户之密码

# chpasswd < doiido.txt

break continue exit return对比

break、continue、exit一般用来循环结构中决定循环(for、while、if)的走向。

break n:n表示跳出循环的层数,要是省略n表示跳出整个循环。

continue
n:n表示退及第n层继续循环,如若省略n表示过了这次巡回,忽小本次巡回的剩余代码,进入循环的生一样蹩脚巡回。

exit
n:退出时shell程序,n为重临值。n也堪略,再下一个shell里透过$?接收这n值。

return n:用于在函数里,作为函数的返值,用于判断函数执行是否对。

  1. [root@lamp ~]# cat for_09.sh
  1. #!/bin/bash

  2. for((i=0;i<=5;i++))

  3. do

  1.   if
    [ $i -eq 3 ];then

  2.   #continue

  3.   #break

  4.   exit

  5.   fi

  6.   echo $i

  7. done

  8. echo “ok”

contine生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

  5. 4

  6. 5

  7. ok

break生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

  5. ok

exit生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图