Ubuntu--(3)shell快速入门
来源:互联网 发布:北京网络职业学院 八维 编辑:程序博客网 时间:2024/06/05 20:29
运行shell文件方法
sh -x script_name //将执行脚本并显示所有变量的值sh -n script_name //不执行脚本,只检查语法sh -v script_name //执行脚本前把脚本内容显示在屏幕上 sh script-file //这个好像会有问题./script-file
变量运算
a=10b=20echo $(($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 "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 statementdone;
例如:
i=10while (($i>=5)); do echo $i; ((i--));done;
建议下面的用[]
i=10 while [ $i -gt 5 ]; do echo $i; ((i--)); done;
until
until condition; do statementdone;
例如:
a=10until (($a<0)); do echo $a; ((a--));done
建议下面的用[]
i=10 until [ $i -lt 1 ]; do echo $i; ((i--)) done;
for
for(()); do statementdone;
例如:
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: " $logecho "可以直接放在双引号内部:$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 $filedoneecho "\$* 包含参数列表"for file in $*do ls -l $filedoneecho "双引号阻止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/bashecho "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 passwordif [ -z "$password" ]then echo "the length of the password you input is 0"fiecho "test FOR:"for i in 1 2 3 4 5do echo $idoneecho "注意这里的符号,不是单引号,是Esc键下面的那个"for i in `seq 5`do echo $idone
Example:
#! /bin/bashsum=0number=1while test $number -le 100do sum=$[ $sum + $number ] let number=$number+1doneecho "the sum is $sum"
Example:
#! /bin/bashecho -n "Enter a number(>0):"while read ndo 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/bashsum=0number=1until ! test $number -le 100do sum=$[ $sum + $number ] let number=$number+1doneecho "the sum is $sum"
统计当前目录下文件的个数
#! /bin/bashcount=0for file in `ls`do if ! [ -d $file ] then let count=$count+1 fidoneecho "there are $count files"
脚本执行命令
exit 强行退出一个脚本
Eample:捕获INT信号,并显示信息提示用户怎样退出程序
#! /bin/bashtrap `echo "type quit to exit"` INTwhile [ "$input" != 'quit' ]do read inputdone
Eample:捕获EXIT信号退出时输出Goodbye
#! /bin/bashtrap `echo "Goodbye"; exit· EXITecho "Type 'quit' to exit"while [ "$input" != "quit" ]do read inputdone
命令表
可以用一个命令的退出值来控制是否执行另一条命令
a&&b //与命令表,当且仅当a执行成功才执行ba||b //或命令表,当且仅当a执行失败才执行ba;b //顺序命令表,先执行a,再执行b
cut命令以特定的方式分割行,并输出特定的部分Example:
city.txt文件内容如下:
Beijing010Shanghai021Tianjin022Hangzhou0571
对文件city.txt取每行的第3到6个字符前输出
$ cut -c 3-6 city.txt
-f选项提取行中指定的字段,字段间的分割符由-d选项指定,默认分割符为Tab键,下面提取city.txt第二字段
$ cut -f 2 city.txt
diff命令确定两个版本的源文件存在哪些修改,Example:
city2.txt内容如下
Beijing011Shanghai021Tianjin022HangZhou0571
判断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 GAIjkl mno pqrStU vwx yz12A Cft pOdHct 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/bashif [ ! -d ~/.trash ]then mkdir ~/.trashfiif [ $# -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 replyif [ "$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" fifi
- Ubuntu--(3)shell快速入门
- shell编程快速入门
- SHELL快速入门
- shell 编程快速入门
- BASH SHELL快速入门
- shell编程快速入门
- shell快速入门
- Shell 编程快速入门
- Shell 编程快速入门
- shell编程快速入门
- shell编程快速入门
- shell编程 快速入门
- Shell脚本快速入门
- [shell]快速入门
- shell快速入门
- Ubuntu入门学习bash和shell(3)
- Ubuntu linux 快速入门
- Linux Bash Shell快速入门
- spring-boot 加载本地静态资源文件路径配置
- wait()、notify()、notifyAll()
- spring-boot 加入拦截器Interceptor
- oracle 12c RAC to Single Instance的Active Database Duplicate测试
- MD5,salt,SHA,PBKDF2加密
- Ubuntu--(3)shell快速入门
- jquery实现图片轮番效果(一)
- Android Activity 切屏处理
- Android调用打电话(Call Phone)
- Android自定义ListFragment 显示
- 【数据结构】算法8.2 伙伴系统-分配
- POI写入Excel下拉框[Select选项]
- mvn jetty:run内存溢出解决
- Web框架学习篇--Strust1(一) 原理