文章目录
shell是什么
1.Shell: linux壳
2.Kernel: linux内核
常用的shell
- Bourne Shell (sh)
- • C Shell (csh)执行效率有点差,多用于交互
- • Korn Shell (Bourne Shell 超集 ) (ksh)集合了 Cshell 和 Bourne shell 的优点并且和 Bourne shell 完全兼容
Bash配置文件
-
bash_history
记录命令历史记录 -
bash_logout
退出 Shell 时要执行的命令 -
bash_profile
登入 Shell 时要执行的命令,只在会话开始时被读取一次 -
bashrc
每次打开新的 Shell 时要执行的命令
别名和函数之类通常放在该文件中
shell 变量
shell 脚本
Shell脚本编程特点
脚本语言往往是解释运行而非编译,即由解释器(Interpreter)读入脚本程序代码,将其转换成内部的形式执行,而解释器本身则是编译型程序。
Shell脚本语言是Linux/UNIX系统上一种重要的脚本语言,在Linux/UNIX领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/UNIX开发者和系统管理员的必经之路。利用Shell脚本语言可以简洁地实现复杂的操作,而且Shell脚本程序往往可以在不同版本的Linux/UNIX系统上通用
脚本编辑和运行过程
- 编辑文件
可使用vim, gedit, kate等文本编辑器。保存文件,一般地将文件保存为***.sh - 赋予文件可执行权限
– chmod +x ***.sh - 运行及排错
– 运行方式:./***.sh (当前目录下运行)或者 sh ***.sh, bash ***.sh (取决你用哪种shell)
shell脚本编写
一个交互式设计
Teminal下读入你的名字,并欢迎
#!/bin/bash
echo "What's your name?"
read name
echo "Welcome,$name"
命令集
编写一个 Shell 程序 mkf,此程序的功能:显示 root 下的文件信息,然后建立一个 kk 的文件夹,在此文件夹下建立一个文件 aa,修改此文件的权限为可执行。
a.sh
cd /root
mkdir kk
cd kk
vi aa
chmod +x aa
cd /root
命令参数
shell 脚本语法
变量
一个bash变量默认是一个字符串,但可以把一个变量定义为一个整形值、数组和函数,可以使用declare和typeset命令来声明变量,对它们初始化,并设定它们的属性。
语法:declare [options] [name[=value]]
typeset [options] [name[=value]]
用途:声明变量、初始化变量、设置变量属性
读写变量
- 变量赋值 变量名=值
注意等号=两侧没有空格,如果值有空格,必须用引号
- 访问变量值 $变量名
a="How are you"
echo "He just said: $a"
- 从键盘读入变量值/屏幕输出
read a
echo "you just input $a"
read var1 var2 ...
read –p “string” var1 var2 … varn
echo $var1 $var2
echo的高级使用
更多命令选项
-n 输完后不换行
-e 激活特殊字符/设置
-E 关闭特殊字符/设置(默认)
各种颜色字符输出
echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
ANSI控制码的说明
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m --\33[37m 设置前景色
\33[40m – \33[47m 设置背景色
\33[nA 光标上移n行 \33[nB 光标下移n行 \33[nC 光标右移n行 \33[nD 光标左移n行 \33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
字符串操作
- 判断读取字符串值
2.字符串操作(长度,读取,替换)
数组
1.赋值
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2... [n]=varN)
(3) array[0]=var1
array[1]=var2
...
array[n]=varN
引用数组
echo ${array[n]}
计算数组元素个数
${#array[*]}
#!/bin/bash ##声明bahs
names=(xiaoming daxiong [10]=yadam)
echo ${names[1]} ${names[10]}
declare -a arr[10] ## 声明是一个数组
arr[0]=ifcen
arr[2]=ocen
arr[4]=earth
echo ${arr[4]} ##结果:earth
echo ${arr[*]} ##打印全部
表达式
- 数字运算
expr integer operator integer
其中operator为 +、-、*、/、% (取余数), 但对 * 的使用要 的使用要用转义符,如:
expr 4 \* 5
20
int=`expr 5 + 7`
echo $int
12
1.注意 ` 是左上角esc下面的那个键。这叫倒引号(backticks),里面是命令,会执行
2.注意,这里每一个数字和符号均为参数,它们之间要用空格分开
更多的bash运算
+, -, *, /, %取模(取余), **(乘方)
实现算术运算:
(1) let var=算术表达式
(2) var=$[算术表达式]
(3) var=$((算术表达式)) //推荐使用这种类C风格
(4) var=$(expr arg1 arg2 arg3 ...)
(5) declare –i var = 数值
(6) echo ‘算术表达式’ | bc
注意:乘法符号有些场景中需要转义,如*
bash有内建的随机数生成器:$RANDOM(0-32767)