shell学习笔记1 【linux shell 编程从初学到精通第2版】
- 已登录用户的个数: who | wc -l
- 查看系统有哪些用户登录 : who
- 新建一个文件/bin/ct11,在文件中输入一条命令,chmod为该文件设置执行权限
# cat > /bin/ct11
Who | wc -l
按ctrl+d
# cd /bin
# chmod +x ct11
# ./ct11
执行结果:
2
- # echo 转义序列:
\c :指示echo 不要打印 最后的换行符号
\a :警示字符,通常是ASCII的BEL字符
\b :退格
\f : 换页
\n :换行
\r:回车
\t:水平制表符
\v:垂直制表符
\\ :反斜杠字符
\oddd:将字符变成3位的八进制数值
- Printf 语句printf “i said ‘%s,%s1,%s2,%s3’\n” this is my pen
- 清楚屏幕 :clear
- Echo输入一段文字分行追加到文件cc11: echo -e “werw\nsfsd” >>cc11
- 将aa.txt文件中的ascii回车去除,内容写到file.txt中
# tr -d ‘\r’ < aa.txt > file.txt
- 将aa.txt文件中的回车去除,然后利用管道对其文件内容排序后输入到文件file.txt
# tr -d ‘\r’ <aa.txt | sort >file.txt
- 关闭自动打印输入字符的功能 stty -echo
- 回复自动打印输入字符的功能 stty echo
- 跟踪功能 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执行
- 自动化测试课程目录
- 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!
- unset命令可以删除变量,删除后不能再次使用,unset命令不能删除只读变量
- 例如:echo -e “jdkfja \n” 输出结果:jdkfja
- 这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:jdkfja\n
- 命令替换是指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。 |
注意:条件表达式要放在方括号之间,并且要有空格,例如 [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 算术运算
- Echo `expr 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