shell脚本学习总结,东西很多,供初学者参考。
1.shell 脚本是区分小写的 调用时直接用function_name.
5.控制结构
2)If...then...else语句 3)If...then...elif...then...(else)语句 If [ test_command ] Then Commands Elif [ test_command ] Then Commands Else Commands Fi 4)for ... In语句 For loop_varible in argument_list Do Commands done 5)while语句 While test_command_is_true Do Commands Done 6)until 语句 Until test_command_is_true Do Commands Done 7)case语句 Case $variable in Match_1) Commands_for_1 ;; Match_2) Commands_for_2 ;; . . . *) #option for other values Commands_for_no_match ;; esac 6.break、continue、exit和return语句 Break跳出整个循环体,然后执行循环体外接下来的代码; Continue 结束本次循环,继续下次循环; Exit 退出整个脚本,一般在其后加入一个整数(如exit 0),作为返回代码发送给系统; Return 用于在函数中返回数据,或返回一个结果给调用函数 7.here文档 用于将输入重定向到某个交互式shell脚本或程序,而不需要用户介入。 Program_name << LABLE Program_input_1 Program_input_2 . . Program_input_# LABLE 注意,程序输入行中的LABLE标记之间是没有空白的,且输入的必须是程序所期望的准确数据,否则可能会失效。 8.符号命令 ( ) 在一个子shell中运行括号所括起来的命令 (( )) 在某个shell中对变量进行求值和赋值,并进行数学运算 $(( )) 对括起来的表达式进行求值 [ ] 与test命令相同 [[ ]] 用于字符串比较 $( ) 命令替换 ` ` 命令替换 9.命令行参数 命令行参数$0,$1,$2,...,$9是位置参数,$0指向的是命令本身。 命令shift用于位置参数向左移动,如shift命令命令$2成为$1。Shift加入一个数字来移动多个位置,如shift 3使得$4成为$1。shift是一种按照参数列出顺序来处理每个位置参数的良好方式。 10.特殊参数 $* 指定所有的命令行参数,与$@的意义一样。两者只有在加双引号时意义不同,如 “$*”将整个参数列表作为一个参数来获取,”$@”获取整个参数列表,并将它分隔成不同的参数。 $? 检查返回代码。一个成功执行完的命令返回代码为0,不成功是一个非0值。 11.双引号,单引号和 `(esc下面的按键) 单引号’’对内容进行全引用,也就是说,对变量工命令语句使用文字正文,不进行任何替换;而双引号则进行部分引用,则允许字符替换或命令替换。 `(esc下面的按键)用于执行某个命令或脚本并替换其输出结果,即命令替换,相同功能有$( )。此外,如果希望每次使用某个变量时重新读取它的值,也可使用它,如`$PWD`,则每次使用这个变量时都会重新读取它的新值。 12.文件权限和粘滞位(suid,sgid) 文件权限有读,写,执行三种权限。将文件操作模式设为总是作为某个特定的用户(suid),或总是作为某个特定的组成员(sgid)来执行称为设置粘滞位。可以用命令chmod进行修改文件权限。 13.在远程主机上运行命令 Ssh user@hostname command_to_execute 如:ssh jack@192.168.1.3 “uptime” 14.设置陷阱 当某个程序被迫中止时,会有一个退出信号,这个信号称为一个陷阱(trap)。这样我们可以在捕捉到退出信号时执行命令,如捕获到退出信号1,2,3,15时退出: Trap `echo “nEXITTING on a TRAPPED SINGAL”; exit` 1 2 3 15 注意不能捕获到kill -9.的退出信号。 15.查看用户信息 Who 提供每个登录用户的用户名、tty、登录时间及用户登录地(IP) W 对who的扩展,包括作业进程时间,总用户进程时间等,但没有用户登录地信息。 Last 显示自wtmp文件创建开始登录过的用户名单信息,包括登录时间,退出时间,tty等。 16.ps命令 显示当前系统进程的信息。 17.与用户通信 Wall,rwall,write,talk 18.大小写文本 用tr或typeset命令。 VALUES = “AFCDLD” Echo $VALUES | tr ‘[A-Z]’ ‘[a-z]’ #将大写转换成小写;tr ‘[a-z]’ ‘[A-Z]’则小写转换成大写 或 在VALUES前使用 Typeset -l VALUES #将大写转换成小写;typeset -u 则小写转换成大写。 19.定时运行脚本cron Crontab -e进入用户cron表添加定时脚本,如 在1月15日星期天0:12执行脚本/usr/bin/test.sh #分(0-59) 时(0-23)日(1-31) 月(1-12) 星期(0-6for Sunday-saturday) 12 0 15 1 0 /usr/bin/test.sh 定时任务还可作用at命令。 20.输出控制 静默运行,即不输出任何内容到屏幕上: 2>&1 > /dev/null 输出到系统指定的控制台: > /dev/console 21.解析命令行参数getopts Getopts optionstring VARIABLE Optionstring 是所需的各种参数,用冒号隔开,如果不需要参数,则冒号可以省略。如果optionstring前有一个冒号,则任何未匹配到时会在VARIBLE中加载一个?号 使用getopts的作用是解析出参数,然后作用此参数做不同的操作。如: While getopts :s:m:h:d:p: TM Do Case $TM in S) Do something ;; M) Do something ;; . . . ?) Exit 1 ;; Esac 22.逐行处理文件 While read LINE Do Echo “$LINE” Done <$FILENAME 23.作用select命令创建菜单 Select menu in Yes No Quit Do Case $menu in Yes) Do something ;; No) Do something ;; Quit) Break ;; *) Do something ;; Esac done |