shell日常使用整理
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/wzzfeitian/article/details/30995303
基本常识
1.变量命名规则:
- 首字符必须为字母
- 中间不能有空格,能够有下划线_
- 不能使用标点符号
- 不能使用bash里的keyword
2.变量赋值:
变量名=值, (注意。= 两边不能有空格)
var=1
var=$var+1
echo $var+1
输出为1+1,而不是2
能够用例如以下方法使其输出为2
let "var+=1"
#var=$[$var+1]
#var=$(($var+1))
echo $var
或者
var=1
var= expr $var + 1 #(注意,+ 两边的空格,一定要有)
let表示数学运算,expr用于整数值运算。每一项用空格隔开,$[]将中括号内的表达式作为数学运算先计算结果再输出。
在bash中。将数学运算结果赋给某个变量。 var=$[ operation ]
变量自增,自减
let var++ let var--
let var+=2
echo "10.2-2" | bc -- 小数运算要用bc $[]不支持小数
3.变量使用
$var ${var} " " 中能够用$var ,\" ' ' 中不能够用$var \" $(cmd) 与 `cmd` 等效
内建变量
- $RANDOM 随机数
- 字段分隔符 IFS=$'\n'
- $0 程序名 。$1 ... $9 是命令行參数 多于9个命令行參数的话,后面的须要${10} ${11}这样的格式
- $# 表示传入的命令行參数的个数。在{}中使用$#时,要改用 ${!#}
- $* 全部命令行參数当成一个单词存储
- $@ 全部命令行參数当成一个字符串中的多个单词
- $$ 脚本的PID
条件变量替换
Bash Shell能够进行变量的条件替换,既仅仅有某种条件发生时才进行替换,替换条件放在{}中.
- ${value:-word} 当变量没有定义或者值为空时,返回值为word的内容,否则返回变量的值.
- ${value:=word} 与前者相似,仅仅是若变量没有定义或者值为空时,在返回word的值的同一时候将 word赋值给value
- ${value:?
message}
若变量已赋值的话,正常替换.否则将消息message送到标准错误输出若此替换出如今Shell程序中,那么该程序将终止执行. - ${value:+word} 若变量已赋值的话,其值才用word替换,否则不进行不论什么替换
- ${value:offset} ${value:offset:length} 从变量中提取子串,这里offset和length能够是算术表达式.
- ${#value} 变量的字符个数
- ${value#pattern} ${value##pattern} 去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配 #与##的差别在于一个是最短匹配模式,一个是最长匹配模式.
- ${value%pattern} ${value%%pattern} 与7.相似,仅仅是是从value的尾部于pattern相匹配,%与%%的差别与#与##一样
- ${value/pattern/string} ${value//pattern/string} 进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的差别与上同 注意: 上述条件变量替换中,除2.外,其余均不影响变量本身的值
4.比較运算符
- 文件比較运算符
-e filename 假设 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 假设 filename 为文件夹。则为真 [ -d /tmp/mydir ]
-f filename 假设 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 假设 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 假设 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 假设 filename 可写。则为真 [ -w /var/mytmp.txt ]
-x filename 假设 filename 可执行。则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 假设 filename1 比 filename2 新。则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 假设 filename1 比 filename2 旧。则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
- 字符串比較运算符 (请注意引號的使用,这是防止空格扰乱代码的好方法)
-z string 假设 string 长度为零,则为真 [ -z "$myvar" ]
-n string 假设 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 假设 string1 与 string2 同样,则为真 [ "$myvar" = "one two three" ]
string1 != string2 假设 string1 与 string2 不同。则为真 [ "$myvar" != "one two three" ]
- 算术比較运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
5.结构语句
if command
then
commands
fi
if command; then #假设then与if在同一行,if command后要加';'
commands
fi
if command
then
commands
else
commands
fi
if command1
then
commands
elif command2
then
commands
fi
if test condition
if [ condition ] 注意[]与condition之间的空格。> < 须要转义
then
commands
fi
if ((expression)) > < 不须要转义
then
commands
fi
if [[condition]] 能够用正則表達式
then
commands
fi
case variable in
pattern1 | pattern2)
commands1
;;
pattern3)
commands2::
;;
*)
default commands
;;
esac
for var in list
do
commands
done
while test command
do
other commands
done
until test command
do
other commands
done
break n (default 1) 跳出n层循环
continue n (default 1) 继续n级循环
select var in list
do
commands
done
6.函数
语法
[ function ] funname [()]
{
action;
[return int;]
}
说明:
1. 能够带function fun() 定义。也能够直接fun() 定义,不带不论什么參数。
2. 參数返回,能够显式return返回,return后跟数值n(0-255)。假设不加,将以最后一条命令执行结果。作为返回值。
注意事项
- 必须在调用函数地方之前,声明函数,shell脚本是逐行执行。
不会像其他语言一样先预编译。一次必须在使用函数前先声明函数。
- total=$(func 3 2); 通过这样的调用方法。我们清楚知道,在shell 中 单括号中面,能够是:命令语句。
因此,我们能够将shell中函数。看作是定义一个新的命令。它是命令,因此 各个输入參数直接用 空格分隔。 一次。命令里面获得參数方法能够通过:$0…$n得到。 $0代表函数本身。
- 函数返回值,仅仅能通过$? 系统变量获得,直接通过=,获得是空值。事实上,我们依照上面一条理解,知道函数是一个命令,在shell获得命令返回值。都须要通过$?获得。
- 须要获得函数值:通过$?获得
- 假设须要传出其他类型函数值,能够在函数调用之前。定义变量(这个就是全局变量)。在函数内部就能够直接改动。然后在执行函数就能够读出改动过的值
- 假设须要定义自己变量,能够在函数中定义:local 变量=值 ,这时变量就是内部变量,它的改动。不会影响函数外部同样变量的值.
shell调试模式:
- bash -x my_script 能够让bash打印出你脚本执行的过程中的全部语句 每一行前加上文件的行号。这会很实用。要做到这样,你仅仅须要设置以下的环境变量:
export PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}:
' - 调试部份的脚本 (注意:我们在执行脚本的时候,不须要使用bash -x了) 有些时候,你并不想调试整个脚本,你仅仅要调试当中的一部份,那么,你能够在你想要调试的脚本之前,调用“set -x”,结束的时候调用“set +x”就能够了
- bash -n my_script 仅仅检查语法,不执行脚本的模式
- log一些感兴趣的特定的信息 使用log前。我们先写一个函数:
_log() {
if [ "$_DEBUG" == "true" ]; then
echo 1>&2 "$@"
fi
}
能够在脚本中调用 _log "log msg"
假设不设置_DEBUG=true, LOG信息就不会打印出来
- 使用脚本调试器。bashdb。开源的。
经常使用命令
路径切割 dirname 获取文件夹 basename 获取文件名称
生成数字序列 seq start end seq start offset end
字符串截取
- expr substr $var1 起始位置 截取长度 起始位置从1開始 对""引用的string处理有点问题
${}: ${var:起始位置:截取长度} 起始位置从0開始,建议用这样的
字符串替换 ${var/old/new} 替换第一个匹配的old为new ${var//old/new} 替换全部匹配的old为new
- cron时间表的格式 min hour dayofmonth dayofweek command crontab -l 列出已有的cron时间表 crontab -e 加入cron时间表事件 cron文件夹, hourly daily monthly weekly /etc/cron.*ly
shell日常使用整理的更多相关文章
- 经典shell面试题整理
一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/n ...
- Linux基础-shell脚本知识整理和脚本编写----------变量、运算符、流程控制、函数、计划任务(发送邮件)
I:知识整理:变量.运算符.流程控制.函数.计划任务 变量 系统变量:set:显示所有变量 env:环境变量 常用系统变量: path pwd lang home his ...
- shell判断条件整理
1.字符串判断 str1 = str2 当两个字符串串有相同内容.长度时为真 str1 != str2 当字符串str1和str2不等时为真 -n str1 当字符串的长度大于0时为真(串非空) -z ...
- command shell 的知识整理
cmd 也是shell windowns的外壳一种. 查看文件和文件夹 dir mkdir *** 创建文件夹 rd *** 删除文件夹(应该有参数的,递归之类的)CTR+C 终止命令 cd> ...
- 【Linux】之shell特殊变量整理
目录 1. 特殊变量列表 2. 特殊说明 在shell中变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即p ...
- Linux shell日常命令和技巧
转自:http://www.vaikan.com/linux-shell-tips-and-tricks/ 原文:http://www.techbar.me/linux-shell-tips/ 使用L ...
- Shell常用命令整理
http://blog.csdn.net/junmail/article/details/4602745 1. ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. l ...
- shell 日常技巧
批量注释: :<<COMMENT code COMMENT 循环: #!/bin/bash for varible1 in {1..5} #for varible1 in 1 2 3 ...
- Linux Shell常用脚本整理
轮询检测Apache状态并启用钉钉报警◆ #!/bin/bash shell_user="root" shell_domain="apache" shell_l ...
随机推荐
- python函数当容器
def func(): pass func2 = func func2() i = [func,func2] for a in i: a() 函数名就是内存地址,加()代表执行
- 汇总下几个IP计算/转换的shell小脚本-转
原文:http://blog.chinaunix.net/uid-20788470-id-1841646.html 1. IP转换为整数> vi ip2num.sh#!/bin/bash# ...
- js 获取复选框 和 并改变状态
function checkAll() { var checkbox = document.getElementById('vegeids');// var boxes = document.getE ...
- Oracle时间日期处理方法
https://www.cnblogs.com/plmm/p/7381496.html 1.用于截取年.月.日.时.分.秒 extract()函数 extract(year from sysdate) ...
- virtualenv简单使用
前提 在开发过程中,经常需要使用各种第三方库,而且python又提供了pip,easy_install等工具来简化库的安装,所以很容易就会在系统python的site-packages目录中装满各种各 ...
- [Array] 566. Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- 碰撞的小球 ccf (模拟)
问题描述 试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐 ...
- IE9没有内置鼠标手势,还要自己写
写了个IE插件,然后获取鼠标,信息, 模拟了鼠标手势,在虚拟机里面测试,完全好使,但是现在又不敢在Win7上用了. 愁死了... 为了实现一个鼠标手势. 写的那破玩意,竟然50多K.....太大了.. ...
- GYM 101350 F. Monkeying Around
F. Monkeying Around time limit per test 2.0 s memory limit per test 256 MB input standard input outp ...
- 手机号测吉凶python代码
根据数理数来测电话后四位吉凶: 数理数 解释批注 0点特殊.......大吉 1大展鸿图.可获成功吉 2一盛一衰.劳而无功凶 3蒸蒸日上.百事顺遂吉 4坎坷前途.苦难折磨凶 5生意欣荣.名利双收吉 6 ...