美文网首页
ShellScript小试牛刀

ShellScript小试牛刀

作者: Zhang21 | 来源:发表于2017-10-24 18:06 被阅读19次

《LinuxShell脚本攻略》笔记,Chap-1:小试牛刀


简介

#bash(Bourne Again Shell),shell环境使得用户能与操作系统的内核进行交互操作

#!/bin/bash
#date
#description

cmd1; cmd2
cmd3

#sh /path/xx.sh
#Bash还有一个历史记录文件 ~/.bash_history

终端打印

#终端作为交互式工具,用户可以通过它与shell环境进行交互

echo '$var'
echo $var
echo -e "1\t2\t3"
echo -e '\e[1;31m Red color \e[0m'    #彩色

echo {1..10}        #输出1到10
echo {A..H}     #for i in {a..z}

cat << EOF
11
22
33
EOF

# \转义字符
printf "%-5s %-10s $-4.2f\n" 001 Zhang 56.789
#格式替代符%s %d %c %f, -左对齐

玩转变量和环境变量

#Bash中,每一个变量默认值值都是字符串形式
#环境变量和自定义变量

echo $SHELL
echo $UID

var=value   #这是赋值
#var = value这是相等操作
echo $var
echo ${var}
echo ${#var}    #字符数

#export用来设置环境变量,此后,任何shell中的程序都会继承环境变量
ZHANG=Gentleman
export ZHANG

PATH="$PATH:/home/zhang/bin"
export $PATH

通过shell进行数学运算

#let, expr, bc, [], (())
#要注意默认是字符串类型哦

n1=1;n2=2
let sum=n1+n2
let n1++;let n2-=1

sum=$[ n1 + n2 ]
sum2=$(( sum + 3 ))

sum=`expr 3 + 4`

#浮点计算 bc
echo "8 * 1.1" | bc

#设置小数点精度
echo "scale=2; 3/8" | bc

#进制转换
num=100
echo "obase=2; $num" | bc

num=1100100
echo "obase=10; ibase=2; $num" | bc

#平方和平方根
echo "sqrt(100)" | bc
echo "10^2" | bc

文件描述符重定向

#最常用的文件描述符是 stdin(0), stdout(1), stderr(2); 通过内容过滤将输出重定向到文件

echo "This is a sample text 1" > temp.txt   #覆盖
echo "This is sample text 2" >> temp.txt    #追加

ls + >stdout.txt 2>stderr.txt
cmd 2>&1 /dev/null  == com &> /dev/null     #null设备也被称为黑洞

#当一个command发生错误并退回时,它会返回一个非0的状态码
echo $?

#tee命令,一方面可将数据重定向到文件,另一方面还可提供一份重定向数据的副本作为后续命令的stdin
#tee默认覆盖文件,-a选项追加
cat temp.txt | tee tee.txt | cat -n

数组和关联数组

#数组借助索引将多个独立的数据存储为一个集合
#普通数组只能使用整数作为数组索引,而关联数组可以使用字符串作为数组索引
#还可将数组定义成一组索引-值(index-value)

arr=(1 two 3 four 5)
echo ${arr[0]}
arr[0]=One

index=3
echo ${arr[$index]      #arr[3]
echo ${arr[*]}
echo ${#arr[*]}     #arr-length

#关联数组可用任意文本作为数组索引
declare -A ass_arr
ass_arr=([index1]=val1 [index2]=val2 ...)   #内嵌索引-值
ass_arr[index3]=val3    #独立索引-值
echo ${!ass_arr[*]}     #列出数组索引

别名

#alias作用是暂时的,关闭终端后别名就失效;
#为使别名一直保持,可将其写入 ~/.bashrc,因为每一个新的shell都会执行~/.bashrc中的命令
#新设置的别名将取代已有别名

alias vi=vim; unalias vi
echo "alias ll='ls -l --color=auto'" >> ~/.bashrc

#\对别名命令进行转义,执行原本的命令。避免攻击者利用别名将某些特权命令替换成别有用心的命令
\vi test.sh

获取、设置日期和延时

#很多应用程序需要以不同的格式打印日期,设置日期和时间,以及根据日期和时间执行操作;
#延时通常用于在程序执行过程中提供一段等待时间;
#在Unix-like系统中,日期被存储为一个整数,其大小为世界标准时间1970年1月1日0时0分0秒起所流逝的秒数;
#这种计时方式被称之为 纪元时或Unix时间;
#通过纪元时间,可知道两个日期之间相隔了多少秒
#编写以循环方式运行的监视脚本时,设置时间间隔是必不可少的

date +%s

#!/bin/bash
start=$(date +%s)
commands
sleep 1
end=$(date +%s)
diff=$((end - start))
echo "$diff seconds"

调试脚本

#调试功能能在出现一些异常情况时生成运行信息

#!/bin/bash -xv
sh -x
sh -n

函数和参数

function fname()
{
statements
}


fname()
{
echo $1, $2     #访问第参数1和参数2,$n第n个参数
echo "$@"       #以列表的形式一次性打印所有参数
echo "$*"       #类似于$@,但参数被作为单个实体
return 0        #f返回值
}
fname 1 22 333  #返回上面定义的变量


#递归函数,能够调用自身,不断地生成新的进程,最终会造成xx
#导出函数,使用export导出,这样函数作用域就可以扩展到子进程
export -f fname
#读取命令返回值
echo $?

读取命令序列输出

#输入通常是stdin,输出stderr或stdout,这些命令称为 过滤器(filter)。我们使用 管道(pipe) 来连接每一个过滤器
cmd1 | cmd2 | cmd3

#子shell,子shell生成独立的进程,不会对当前shell有任何影响,所做改变仅限于子shell内
zhang=$(ls | cat -n)
#反引用
zhang=`ls | cat -n`

读取字符

#read是一个重要的从标准输入中读取文本的命令
#可以使用read以交互的形式来读取用户的输入

read -n 5 zhang     #读取字符数
echo $zhang

read -s passwd      #不回显
echo $passwd

read -t 5 zhang     #超时时间
echo $zhang

read -p zhang       #显示提示信息
echo $zhang

read -d ":" zhang       #定界符结束输入
123:
echo $zhang

字段分隔符和迭代器

#内部字段分隔符(Internal Field Separator, IFS)是shell中的一个重要概念
#IFS的默认值为空白字符(换行符、制表符、空格)
awk -F: '{print $1,$3}' /etc/passwd     #IFS=":"

#对一些列值进行迭代,循环非常有用
for i in {1..10}
do
cmd
done

while condition
do
cmd
done

until condition
do
cmd
done

比较与测试

#程序中的流程控制是由比较和测试语句来处理的
if condition1 || condition2
then
    cmd1
elif condition3 && condition4
then
    cmd2
else
    cmd3
fi

#算术比较
if [ $num -ge 10 -a $num -lt 20 ]

-eq
-gt
-ge
-lt
-le
-a
-o

#文件系统相关
if [ -f $file1 -o -x $file2]

-x
-w
-r
-f
-d
-e
-b      #block
-l

#字符串比较
[[ $str1 = $str2]]

=       #=号旁有空格--是比较关系;=号旁没空格,是赋值语句
!=
>
<
-z      #空字符
-n      #非空字符

#使用test命令来执行条件检测
if [ $num -eq 0 ]  -- if test $num -eq 0

相关文章

  • ShellScript小试牛刀

    《LinuxShell脚本攻略》笔记,Chap-1:小试牛刀 简介 终端打印 玩转变量和环境变量 通过shell进...

  • shellscript 参考

    先介绍两个非常好的查询网站:sed-and-awk-101-hacksBashPitfalls shellscri...

  • awk命令

    awk命令的基本使用 [root@shellscript ~]# head -n 3 /etc/passwd | ...

  • 5shellscript

    开头加入#!bin/bash解释器,能使其变为进程,运行方式在子进程执行,开辟一个新进程。如果是文件,要不是当前s...

  • linux shell脚本基础教程

    shellScript介绍 Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全...

  • 2018/04/10

    小试牛刀。

  • 水粉画

    小试牛刀

  • 谁表白

    小试牛刀

  • 看看

    小试牛刀

  • 水彩画处女作

    闲在家中,小试牛刀

网友评论

      本文标题:ShellScript小试牛刀

      本文链接:https://www.haomeiwen.com/subject/rmexpxtx.html