Ubuntu--(3)shell快速入门
2016-10-10 21:42
204 查看
运行shell文件方法
sh -x script_name //将执行脚本并显示所有变量的值 sh -n script_name //不执行脚本,只检查语法 sh -v script_name //执行脚本前把脚本内容显示在屏幕上 sh script-file //这个好像会有问题 ./script-file
变量运算
a=10 b=20 echo $(($a+$b)) echo ((3**2))
数字比较选项
test int_num1 option int_num2或者
if [ int_num1 option int_num2 ]
-eq //equal相等返回真 -ne //not equal不等返回真 -lt //lower than小于返回真 -le //lower or equal小于或者等于 -gt //greater than大于等于 -ge //greater of equal大于等于返回真
定义数组
declare [-afirx] -a //定义数组 -f //定义函数 -i //定义整数 -r //定义为只读 declare -a myarry=(5 6 7 8) echo ${myarry[2]}
字符串运算:
${#string} //$string的长度 ${string:position} //$position开始提取字符串 ${string:position:length} //$从位置position开始提取长度为$length的子串 ${string#substring} //$从开始删除最短匹配子串 ${string##substring} //$从开始删除最长匹配子串 ${string%substring} //$从结尾删除最短匹配子串 ${string%%substring} //$从结尾删除最长匹配子串
与字符串比较有关的选项
if [ -z "$str1" ] -z str //当字符串str长度为0时返回真 -n str //当字符串str长度大于0时返回真 str1=str2 //当字串str1与str2相等时返回真 str1!-str2 //当字符串str1与str2不等时返回真
test判断
-f //文件是否存在 -d //目录是否存在 -r //文件是否有读权限 -w //文件是否有写权限 -x //文件是否有执行权限
例如:
test -f $filename && echo 'exist'||echo 'not exist' test -d $filename && echo 'exist'||echo 'not exist' test -r $filename && echo 'exist'||echo 'not exist' test -w $filename && echo 'exist'||echo 'not exist' test -x $filename && echo 'exist'||echo 'not exist'
用于文件测试的test选项
if [ -x /file1 ]
-b file //当文件是块设备时返回真 -c file //当文件是字符设备时返回真 -d pathname //当pathname是下一个目录时返回真 -e pathname //当指定的文件或者目录存在时返回真 -f file //当file为常规文件(不包括符号链接、管道、目录等)返回真 -g pathname //当pathname指定的文件或者目录设置了SGID位时返回真 -h file //当file是符号链接时返回真 -p file //当file是命名管道时返回真 -r pathname //当pathname抒写的文件或者目录是可读时返回真 -s file //当file存在且当大小为0时返回真 -u pathname //当pathname指定...设定了SUID位时返回真 -w pathname //当pathname指定...文件可写时返回真 -x pathname //当pathname指定...文件可执行时返回真 -o pathname //当pathname指定...文件被当前用户拥有时返回真
[]判断
在中括号中必须都要使用空格来分隔在中括号中的变量,最好都要双引号括起来
在中括号中的常数,最好都以单引号括起来
[ '$a' == '$b' ] && echo 'Yes' || echo "No" [ '12' == '10' ] && echo 'Yes' || echo "No" [ '12' != '10' ] && echo 'Yes' || echo 4000 "No"
单分支判断
if[]; then echo statement fi
双分支判断
if[]; then echo statement else echo statement fi
多分支判断
if[]; then echo statement elif echo statement elif echo statement fi
case多分支
case $name in 1) echo statement;; 2) echo statement;; *) echo statement;; esac
循环
while condition; do statement done;
例如:
i=10 while (($i>=5)); do echo $i; ((i--)); done;
建议下面的用[]
i=10 while [ $i -gt 5 ]; do echo $i; ((i--)); done;
until
until condition; do statement done;
例如:
a=10 until (($a<0)); do echo $a; ((a--)); done
建议下面的用[]
i=10 until [ $i -lt 1 ]; do echo $i; ((i--)) done;
for
for(()); do statement done;
例如:
for ((i=0; i<10; i++)); do echo $i done;
函数
例子:function print(){ echo "Your input is $1" } echo "this program will print your selection!" case $1 in "one") print 1;; "two") print 2;; "three") print 3;; *) print "Usage $0 (one|two|three)";; esac
运行方法,要传入参数:
./shell_example one
echo $SHELL 看当前所用shell $# 传递到脚本的参数个数 $* 传递到脚本的参数,与位置变量不同,此选项参数可超过9个 $$ 脚本运行时当前进程的ID号,常用作临时变量的后缀 $! 后台运行的(&)最后一个进程的ID号 $@ 与$#相同,使用时加引号,并在引号中返回参数个数 $- 上一个命令的最后一个参数 $? 最后命令的退出状态,0表示没有错误,其他任何值表明有错误
逻辑操作符
-a 逻辑与 -o 逻辑或 ! 逻辑非
例子: [ -r shell.c –a –w test.c ]
Example
#! /bin/bash #display the message "hello world!" echo "hello world!" echo "下面定义变量:" log="monday" echo "the value of logfile is: " $log echo "可以直接放在双引号内部:$log" echo "下面面展示位置参数:" echo "\$0 = ** $0 **" echo "\$1 = ** $1 **" echo "\$2 = ** $2 **" echo "\$3 = ** $3 **" echo "\$4 = ** $4 **" echo "显示有多少文件需要列出" echo "$# file(s) to list" echo "\$# 包含参数的个数 $#" echo "将参数列表的值逐一付给变量file" echo "\$@ 包含参数列表" for file in $@ do ls -l $file done echo "\$* 包含参数列表" for file in $* do ls -l $file done echo "双引号阻止Shell对大多数特殊字符的解释,\$ \`除外" echo '单引号阻止Shell对所有字符解释 $log' echo "倒引号括住的命令会被执行,并将执行结果当作表达式的值:" `date` num=1; echo "表达式求值:" $num=$[$num+3] echo $[(7 + 8) / (6 - 3)] echo $num = $[1 + 2] echo "\$[2#10 + 1] = 3 " $[2#10 + 1] echo "\$[16#10 + 1] = 17 " $[16#10 + 1] echo "\$[8#10 + 1] = 9 " $[8#10 + 1] echo "expr 运算符:" expr 1 + 2
Example:
#! /bin/bash echo "please be attention to the use of hte blankspace:" password="join" test "$password" = "join" [ "$password" = "join" ] echo "为字符串变量加上一个双引号是一个好习惯" echo "Shell对字符区分大小写" echo "please input a test password:" read password if [ -z "$password" ] then echo "the length of the password you input is 0" fi echo "test FOR:" for i in 1 2 3 4 5 do echo $i done echo "注意这里的符号,不是单引号,是Esc键下面的那个" for i in `seq 5` do echo $i done
Example:
#! /bin/bash sum=0 number=1 while test $number -le 100 do sum=$[ $sum + $number ] let number=$number+1 done echo "the sum is $sum"
Example:
#! /bin/bash echo -n "Enter a number(>0):" while read n do sum=0 count=0 if [ $n -gt 0 ] then while [ $count -le $n ] do sum=$[ $sum + $count ] let count=$count+1 done echo "the sum is $sum" else echo "please input a number greater than zero" fi echo -n "Enter a number(>0):" done
Example:
#! /bin/bash sum=0 number=1 until ! test $number -le 100 do sum=$[ $sum + $number ] let number=$number+1 done echo "the sum is $sum"
统计当前目录下文件的个数
#! /bin/bash count=0 for file in `ls` do if ! [ -d $file ] then let count=$count+1 fi done echo "there are $count files"
脚本执行命令
exit 强行退出一个脚本Eample:捕获INT信号,并显示信息提示用户怎样退出程序
#! /bin/bash trap `echo "type quit to exit"` INT while [ "$input" != 'quit' ] do read input done
Eample:捕获EXIT信号退出时输出Goodbye
#! /bin/bash trap `echo "Goodbye"; exit· EXIT echo "Type 'quit' to exit" while [ "$input" != "quit" ] do read input done
命令表
可以用一个命令的退出值来控制是否执行另一条命令a&&b //与命令表,当且仅当a执行成功才执行b a||b //或命令表,当且仅当a执行失败才执行b a;b //顺序命令表,先执行a,再执行b
cut命令以特定的方式分割行,并输出特定的部分Example:
city.txt文件内容如下:
Beijing010 Shanghai021 Tianjin022 Hangzhou0571
对文件city.txt取每行的第3到6个字符前输出
$ cut -c 3-6 city.txt
-f选项提取行中指定的字段,字段间的分割符由-d选项指定,默认分割符为Tab键,下面提取city.txt第二字段
$ cut -f 2 city.txt
diff命令确定两个版本的源文件存在哪些修改,Example:
city2.txt内容如下
Beijing011 Shanghai021 Tianjin022 HangZhou0571
判断city1.txt与city2.txt的修改
$ diff city.txt city2.txt
sort 命令对输入以字母排序,Example:
$ sort city.txt $ sort -r city.txt //以字母逆序排序 $ sort -k 2 -r city.txt//指定按字段,默认第一个字段
uniq 命令从已经排好序的输入中删除重复行,Example:
$ sort city.txt | uniq
tr 命令按用户指定的方式对字符执行替换,Example:
alph.txt文件内容如下:
HCC DEF GAI jkl mno pqr StU vwx yz 12A Cft pOd Hct Yoz cc4
$ tr "ABH" "HCA" < alph.txt //将所有的:A->H, B->C, H->A $ tr "ABC" "[Z*]" < alph.txt //将所有ABC替换为Z $ tr --delete " " < alph.txt //删除所有空格
wc命令用来统计文件中字节、单词以及行的数量,Example:
$ wc city.txt
substr命令提取字符串中的一部分,三个参数,原始串,开始位置,字符数 ,Example:
$ expr substr "hello world!" 1 7
seq命令用于生成下一个整数序列,Example:
$ seq 5 $ seq -1 3 $ seq 9 -3 0
定制安全的delete命令
##建立回收机制 ##将需要删除的文件移动到~/.trash中 ##分三步完成:a>在用户主目录下添加.trash目录,用作回收站 ## b>在每次删除文件或者目录时向用户确认 ## c>在需要删除的目录或者文件移动到~/./trash中 #! /bin/bash if [ ! -d ~/.trash ] then mkdir ~/.trash fi if [ $# -eq 0 ] then # 提示信息 echo "Usage:delete file1 [file2, file3 ...]" else echo "you are about to delete these files:" echo $@ # 要求用户是否确认删除 echo -n "are u sure to do that? [y/n]:" read reply if [ "$reply" != "n" ] && [ "$reply" != "N" ] then for file in $@ do # 判断文件或者目录是否存在 if [ -f "$file" ] || [ -d "$file" ] then mv -b "$file" ~/.trash/ else echo "$file: no such file or directory" fi done # 如果回答N或者n else echo "no file removed" fi fi
相关文章推荐
- SHELL快速入门
- shell脚本快速入门
- shell编程快速入门
- Linux Bash Shell快速入门 在线教程
- ubuntu 学习笔记3--shell入门-if空格问题
- shell编程快速入门
- ubuntu下Thrift快速入门
- Shell脚本编程学习入门 02 分类: arm-linux-Ubuntu 2013-08-30 17:45 427人阅读 评论(0) 收藏
- Shell脚本编程学习入门 01 分类: arm-linux-Ubuntu 2013-08-30 17:42 409人阅读 评论(0) 收藏
- Linux Bash Shell快速入门
- Linux Bash Shell快速入门
- linux shell编程五步拳(张迅雷闪击shell系列) 第一集 shell基本语法快速入门
- Shell_BeanShell快速入门---Java应用程序脚本引擎
- shell编程快速入门(上)
- Linux Bash Shell快速入门 在线教程
- Linux Bash Shell快速入门
- shell 编程快速入门
- Bash Shell 十秒钟快速入门指引
- 用Shell脚本快速搭建Ubuntu下的Nodejs开发环境