shell

http://bbs.chinaunix.net/thread-218853-1-1.html
shell 十三问

ps -ef

cat -n在每行前加上行号

kill pid

killall http*

mount /umount 挂载设备

df -h 查看挂载的文件系统的容量

du -sh * du -c 显示已列出文件总大小

sort 排序字符
sort -n 排序数字

pgrep 进程名 获得进程PID

grep -v t file 反选查找不含有t 在file中
grep -n 显示匹配到的行号
grep -c 统计行数 grep [tf] file 正则表达式匹配

export 设置环境变量

vim:
gg:到第一行
G:到第一行
dG:删除所有
dd:删除光标所在行
删除后可以用p命令取回,将刚删除的行输入到光标所在行
复制:yw 复制一个单词,y$ 复制光标所在行到行尾,,再用p进行粘贴
或 使用 v 进入可视模式,并移动光标选择要复制的文本,输入y复制,再用p粘贴

脚本编写:

!/bin/bash

echo -n 将文本字符串与 命令输出的结果显示在同一行

echo 中需要进行转义 如 !

printf "%-5s %-10s %-4.2f\n" %s %c %f
%-5s -表明左对齐 宽度为5的 字符串替换 %5s- 表明右对齐

echo -e 接受并识别“”内的转义字符
echo -e "1\t2\t3" ---> 1 2 3
echo -e "\e[1;31m This is red text \e[0m" \e[1;31 颜色设置为红色,\e[0m重置

echo ${#var} 打印变量长度

let result=var1+var2 -->等同于 result=[var1+var2] 或 result=((var1+var2)) result=expr $var1+$var2

计算浮点数: echo "4 * 0.56" | bc
设置小数位个数为2: echo "scale=2;3/8" | bc
设置进制转换: echo "obase=2;no" | bc 转换为2进制 no=1100100 echo "obase=10;ibase=2;no" | bc 将二进制ibase转换为十进制obase

echo $? 打印前一个命令退出状态,失败返回非0

重定向前加0 1 2代表输入输出到指定文件
0标准输入 1标准输出 2标准错误
2>&1 output.out

cat a* | tee out.txt | wc -w 将cat的输出一份输出到out.txt 一份作为标准输入传给| 管道 tee相当于一个复制转发

tee -a 追加

cat<<EOF>log.txt
LOG FILE HEADER
This is a test log file
Function:System statistics
EOF

将EOF之间的内容重定向至log.txt

array_var=(1 2 3 4 5 6)
{array_var[0]}="test1"{array_var[]} 打印所有元素 或[@]
$[#array_var[
]} 打印数组长度

关联数组:类似一种键值对
declare -A ass_array
fruit=([apple]='100dollars' [orange]='150 dollars')
{fruit[apple]} 获取索引列表(键列表):{!fruit[*]}

alias newCommand='command sequence'
在命令前加\ 来防止不安全的命令伪装成别名

stty -echo 禁止将输出发送至终端,stty echo 则允许发送输出

date +%s 获取时间戳时间

date "+%d %B %Y" ---> 20 May 2010

echo value1 引用变量时需要 对变量赋值时不用$

命令输出的内容赋值给变量: 或 $( )

输出重定向 date > test 或追加 date >> test

输入重定向: wc -l < test6

expr 1 + 5

$[ 1+5 ] 将数学运算赋值给变量

(bc << EOF scale=4 a1=(var1 * var2 ) b1=(var3 * $var4)
a1 + b1
EOF
)

if 命令的退出码是否为0 即成功执行并退出

then
fi

if command
then
command
else
command
fi

test varibles 检查变量是否有内容

test 数值

n1 -eq n2
n1 -ge n2
n1 -gt n2
n1 -le n2
n1 -lt n2
n1 -ne n2

字符串:
test -n str1 检查字符串长度是否非0
test -z str1 检查是否长度为0

字符串顺序:

< 需要转义

比较大小按标准的ASCII顺序,大写字母小于小写字母
sort命令实有本地化语言定义顺序,小写字母小于大写字母

数值比较用 -gt
字符比较用 > <

文件比较:
-d file 是否存在,且为目录
-e file 文件是否存在
-f file 文件是否存在且是一个文件
-r 是否可读
-s 文件存在且非空

#0 $1
-ne 不等于 not equal

if [ ]
then
echo ..
fi

ls -A | wc -w 结果为0判断目录为空

echo -n 不换行输出

echo -n enter name:
read name

read -p "Please enter your name:" name

[ -e /etc/passwd ],注意的是[]前后必须有空格,如[-e /etc/passwd]是错误的

写法

-d FILE_NAM # True if FILE_NAM is a directory
-e FILE_NAM # True if FILE_NAM exists
-f FILE_NAM # True if FILE_NAM exists and is a regular file
-r FILE_NAM # True if FILE_NAM is readable
-s FILE_NAM # True if FILE_NAM exists and is not empty
-w FILE_NAM # True if FILE_NAM has write permission
-x FILE_NAM # True if FILE_NAM is executable

字符串测试操作

-z STRING # True if STRING is empty
-n STRING # True if STRING is not empty
STRING1 = STRIN2 # True if strings are equal
STRING1 != STRIN2 # True if strings are not equal

算术测试操作
var1 -eq var2 # True if var1 is equal to var2
var1 -ne var2 # True if var1 not equal to var2
var1 -lt var2 # True if var1 is less than var2
var1 -le var2 # True if var1 is less than or equal to var2
var1 -gt var2 # True if var1 is greater than var2
var1 -ge var2 # True if var1 is greater than or equal to var2

if [ condition-is-true ]
then
command 1
command 2
...
...
command N
fi

if [ condition-is-true ]
then
command 1
elif [ condition-is-true ]
then
command 2
else
command 4
fi

case "VAR" in pattern_1) # commands whenVAR matches pattern 1
;;
pattern_2)
# commands when VAR matches pattern 2 ;; *) # This will run ifVAR doesnt match any of the given patterns
;;
esac

read -p "Enter the answer in Y/N: " ANSWER
case "$ANSWER" in
[yY] | [yY][eE][sS])
echo "The Answer is Yes :)"
;;
[nN] | [nN][oO])
echo "The Answer is No :("
;;
*)
echo "Invalid Answer :/"
;;
esac

COLORS="red green blue"
for COLOR in COLORS do echo "The Color is:{COLOR}"
done

for (( VAR=1;VAR<N;VAR++ ))

while 循环
当所给的条件为true时,循环执行while里面的代码块
判断条件可以是任意的测试或者命令,如果测试或命令返回0,则表示条件成立,

如果为非0则退出循环,如果一开始条件就不成立,则循环永远不会执行。

while [ CONNDITION_IS_TRUE ]
do

Commands will change he entry condition

command 1
command 2
...
...
command N
done

./script.sh param1 param2 param3 param4

0 -- "script.sh"1 -- "param1"
2 -- "param2"3 -- "param3"
$4 -- "param4"

ping -c 1 $HOST ping 1个包

mkdir tempDir && cd tempDir && mkdir subTempDir这个例子中,如果创建

tempDir成功,执行后面的cd,继续创建subTempDir
$@ -- array of all positional parameters

function myFunc () {
echo "Shell Scripting Is Fun!"
}
myFunc # call

把函数定义在程序开始或主程序之前是一个最佳实践

通配符:

  • :一些常用的通配符* 可以通配一个或多个任意字符
    .txt
    hello.

    great*.md

?匹配一个字符
?.md
Hello?
[]匹配括号内部的任意一个字符

He[loym], [AIEOU]

[!]不匹配括号内的任何字符

[!aeiou]

预先定义的通配符 [[:alpha:]]
[[:alnum:]] [[:space:]]
[[:upper:]]] [[:lower:]]
[[:digit:]]

2>&1
2>&1表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出)

,为什么1前面需要&?当没有&时,1会被认为是一个普通的文件,有&表示重定向

的目标不是一个文件,而是一个文件描述符

cd /proc/pid/fd :查看指定的pid的文件描述符
ls -l

sed :只修改文件中的数据,并发送到标准输出,原文件未改变

echo "This is a test" | sed 's/test/big test/'

sed 's/原字符串/替换后的字符串/'

sed -e 's/原字符串/替换后的字符串/; s/原字符串/替换后的字符串/' file.txt

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容