shell学习笔记1 linux shell 编程从初学到精通第2版

Posted bokeyuan228

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell学习笔记1 linux shell 编程从初学到精通第2版相关的知识,希望对你有一定的参考价值。

  1. 已登录用户的个数: who | wc -l
  2. 查看系统有哪些用户登录 who
  3. 新建一个文件/bin/ct11,在文件中输入一条命令,chmod为该文件设置执行权限

# cat > /bin/ct11

Who | wc -l

ctrl+d

#  cd /bin

# chmod +x ct11

# ./ct11

执行结果:

2

 

  1. # echo 转义序列:

\c :指示echo 不要打印 最后的换行符号

\a :警示字符,通常是ASCIIBEL字符

\b :退格

\f : 换页

\n :换行

\r:回车

\t:水平制表符

\v:垂直制表符

\\ :反斜杠字符

\oddd:将字符变成3位的八进制数值

  1. Printf 语句printf “i said ‘%s,%s1,%s2,%s3’\n” this is my pen
  2. 清楚屏幕 clear
  3. Echo输入一段文字分行追加到文件cc11echo -e “werw\nsfsd” >>cc11
  4. aa.txt文件中的ascii回车去除,内容写到file.txt

# tr -d ‘\r’ < aa.txt > file.txt

  1. aa.txt文件中的回车去除,然后利用管道对其文件内容排序后输入到文件file.txt

# tr -d ‘\r’ <aa.txt | sort >file.txt

  1. 关闭自动打印输入字符的功能 stty -echo
  2. 回复自动打印输入字符的功能 stty echo
  3. 跟踪功能 set -x 是执行跟踪功能打开,set +x是关闭跟踪功能

Eg: cat > aa.sh

Set -x

Echo ss echo

Set +x

Echo sdf echo

Ctrl +d

Chmod +x aa.sh

./aa.sh执行

 

  1. 自动化测试课程目录

 

 

  1. Shell 传递参数

  新建一个tst.sh脚本,

nano -w tst.sh

编辑脚本内容如下,$1以后是以此类推第一第二个参数,$0是文件名称参数

#!/bin/sh

name=$1

echo "my name is ${name}!"

编辑结束后保存 ctrl +o ,退出时ctrl+c

Chmod +x tst.sh 给脚本有执行权限

./tst.sh zhang

执行结果:

My name is zhang

如果是vi模式编辑模式按i,保存并退出按Esc ,:wq!

  1. unset命令可以删除变量,删除后不能再次使用,unset命令不能删除只读变量
  2. 例如:echo -e “jdkfja \n” 输出结果:jdkfja
  3. 这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:jdkfja\n
  4. 命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。命令替换的语法:

`command`

注意是反引号,不是单引号,这个键位于 Esc 键下方。
  下面的例子中,将命令执行结果保存在变量中:

 

  • if...then...fi 是条件语句,后续将会讲解。

算术运算符列表

运算符

说明

举例

+

加法

`expr a+a+b` 结果为 30。

-

减法

`expr a?a?b` 结果为 10。

*

乘法

`expr a\*a\*b` 结果为  200。

/

除法

`expr b/b/a` 结果为 2。

%

取余

`expr bba` 结果为 0。

=

赋值

a=$b 将把变量 b 的值赋给 a。

==

相等。用于比较两个数字,相同则返回 true。

[ a==a==b ] 返回 false。

!=

不相等。用于比较两个数字,不相同则返回 true。

[ a!=a!=b ] 返回 true。


  1.   注意:条件表达式要放在方括号之间,并且要有空格,例如 [a==a==b] 是错误的,必须写成 [ a==a==b ]。

 

 

Shell注释

1.1 shell注释 # 整段代码注释可以采用花括号括起来,类似函数

1.2 Shell字符串

1.2.1 单引号 str=’this is a string’ 单引号里不能出现单引号

1.2.2 双引号  str=”this is a string” 双引号可以有变量,可以出现转义字符

1.2.3 拼接字符串 yourname=”jkhj” greeting=”hello,”$yourname”!” 

1.2.4 获取字符串长度 string=”dfa” echo ${#string}

1.2.5 提取子字符串 string=”my name is ending” echo ${string:1:4}  输出结果:y na

1.2.6 查找字符串  string=”my name is ane”  echo `expr index “$string” is `

1.3 Shell 数组

Bash支持一维数组,不支持多维数组,并且没有限定数组的大小

1.3.1 定义数组

Array_name={1 2 3 4}

或者Array_name={

1

2

3

4

}

单独定义数组的各个分量:

Array_name[0]=1

Array_name[0]=2

1.3.2 读取数组

Value=${Array_name[0]}

使用@或者*可以获取数组中的所有元素

Value=${Array_name[*]}

Value=${Array_name[@]}

1.3.3 获取数组的长度

num=${#Array_name[@]}  获取数组元素的个数

Length=${#Array_name[0]}  取得数组第一个元素的长度

1.3 echo 命令

1.3.1 echo “\”It is a test\”” 输出结果: “It is a test”

1.4 换行

1.4.1 echo “ok!\n”  echo “It is a cat” 

输出结果:

Ok!

It is a cat

1.5 显示不换行

1.5.1 echo ok!\c”echo “It is a dog”

输出结果: ok! It is a dog

1.6 显示结果重定向至文件 echo “It is a test” > myfile

1.7 原样输出字符串(不进行转义),使用单引号 echo ‘$name\”’

1.8 显示当前日期 echo `date`

1.9 算术运算

  1. Echo `expr 2 + 2`
  2. 乘法,echo `expr 4 \* 2`

1.10 关系运算

if [ 3 -lt 8 ]

then

        echo ‘true‘

else

        echo ‘false‘

Fi

1.11 关闭防火墙

Systemctl stop firewalld.service

1.12 查看shell种类 cat  /etc/shells

 

1.13 新建文件  touch filename

 



以上是关于shell学习笔记1 linux shell 编程从初学到精通第2版的主要内容,如果未能解决你的问题,请参考以下文章

Linux shell 菜鸟学习笔记....

Linux shell 编程学习笔记--第一章

linux shell脚本学习

Linux学习笔记-Shell命令机制

Linux学习笔记 -- 为 Shell 传递参数

Linux Shell 学习笔记 00