文章目录
视屏学习:(链接: link.).
shell脚本就是将完成一个任务的所有命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。
一、shell脚本的书写格式与运行命令(bash命令)
- 命名:shell脚本的名字要有意义,建议使用.sh结尾(虽然Linux系统中的文件没有扩展名的概念)。
- 格式:开头第一行需以#!这个特殊符号指定脚本运行环境(如:#!usr/bin/bash)。
- 注释:使用#井号进行注释,shell脚本中最好加入说明文档:
#!/usr/bin/bash
#--------------------------------------
# Author :
# Time :
# Description :
# Version :
#--------------------------------------
echo "hello world!"
shell语言区别于其他编程语言的典型特征:
(1)、每一行代码后可以不添加分号; (也可以添加,连接多条命令)
(2)、shell中的不能直接进行数学运算,需要使用$(( ))进行处理
(3)、shell中多处(赋值时、条件判断时)对于空格的有无要求较为严格
- 运行:如果脚本没有执行权限,可以通过bash命令来运行脚本(如:bash hello.sh);也可以通过chmod给予文件权限直接运行;
- 退出:exit NUM 退出脚本,释放系统资源,NUM代表一个1-255的整数,代表返回值。
二、特殊符号与特殊变量
特殊变量 | 含义 |
---|---|
$0 | Shell本身的文件名 |
$1…$n | 命令行传递的参数,$1是第1参数、$2是第2参数… |
$? | 执行上一个指令的返回值 (显示最后命令的退出状态。如果是0表示执行成功;0以外的值表示失败) |
$* | 代表所有参数, 其间隔为IFS内定参数的第一个字元 |
$@ | 与星号*雷同,代表所有参数, 区别在于不参照IFS |
$# | 代表参数数量 |
$$ | 脚本本身执行的进程号Processing ID |
$_ | 最后一个执行的命令 |
#!bin/bash
echo "shell's name : $0"
echo "shell's parameters : $*"
echo "shell's numbers of parameter : $#"
echo "shell's processing id : $$"
echo "shell's last command : $_"
echo "shell's second parameter : $2"
[marc@localhost Shell]$ bash special_var.sh aa bb cc dd ee
shell's name : special_var.sh
shell's parameters : aa bb cc dd ee
shell's numbers of parameter : 5
shell's processing id : 49823
shell's last command : shell's processing id : 49823
shell's second parameter : bb
特殊字符 | 含义 |
---|---|
~ | 家目录, 命令:cd ~ 表示进入用户家目录 |
- | 上一次目录,命令:cd - 表示进入上一次的目录 |
! | 执行历史命令,命令:!! 表示执行上一条命令 |
$ | 变量中取内容符,命令:echo $HOME 会打印出$HOME变量的内容(家目录) |
& | 后台执行 |
* | shell中的通配符,匹配所有 |
? | shell中的通配符,匹配除回车以外的一个字符 |
; | 分号可以在shell的一行中执行多个命令,命令之间用分号隔开 |
| | 上一个命令的输出作为下一个命令的输入,如:cat filename | grep “abc” |
\ | 转义字符 |
` ` | 反引号, 命令中执行命令,如:echo “Today is `date +%F` ” |
’ ’ | 单引号, shell中的字符串需要用单引号引起来,但是区别于双引号的是,单引号不解释变量 |
" " | 双引号,shell中的字符串也可以用双引号引起来 |
示例:
三、重定向(> ,>>)
- > 重定向输入,覆盖原数据; 如:vcs --help > vcs_help.txt echo haha > test.txt
- >> 重定向追加输入,在原数据末尾添加; 如:find ./ -name “*.sh” >> test.txt
- < 重定向输出; 如 :wc -l < /etc/passwd
- << 重定向追加输出, 如:fdisk /dev/sdb <<EOF …EOF
四、数学运算(expr命令,bc计算器,$(( )) )
- expr命令:只支持整数运算,且字符间必须添加空格隔开;
[marc@localhost ~]$ expr 1 + 1
2
[marc@localhost ~]$ expr 1 - 5
-4
[marc@localhost ~]$ expr 10 \* 2 # 星号*表示乘法应该进行转义,否者认为是通配符
20
[marc@localhost ~]$ expr 10 / 2
5
[marc@localhost ~]$ expr 10 % 3
1
- bc计算器:可进行浮点运算,scale=2表示保留两位小数
[marc@localhost ~]$ echo "scale=2;141+5"|bc
146
[marc@localhost ~]$ echo "scale=2;141-5"|bc
136
[marc@localhost ~]$ echo "scale=2;141*5"|bc
705
[marc@localhost ~]$ echo "scale=2;141/5"|bc
28.20
- 双小圆括号运算(( )),其结果不支持小数
[marc@localhost ~]$ echo $((100+3))
103
[marc@localhost ~]$ echo $((100*3))
300
[marc@localhost ~]$ echo $((100/3))
33
[marc@localhost ~]$ echo $((100%3))
1
[marc@localhost ~]$ echo $((100**3))
1000000
五、格式化输出——echo命令
echo命令介绍:
- 功能:将内容输出到默认显示设备;
- 语法:
echo [-ne] [字符串]
,输出的字符串间以空白字符隔开,并在结尾自动换行;
命令选项:
-n : 不在最后进行自动换行
-e : 解释转义字符,而不会将其当做普通字符输出;(如:\a发出警告声, \t制表符, \n换行符等)
示例1:倒计时显示
#!bin/bash
#--------------------------------------
# Author :
# Time :
# Description :
# Version :
#--------------------------------------
for time in `seq 9 -1 0`;do
echo -n -e "$time\b"
sleep 1
done
echo
示例2:输出一个菜单
#!bin/sh
#--------------------------------------
# Author :
# Time :
# Description :
# Version :
#--------------------------------------
echo -e "\t\t\t\tFriut Shop"
echo -e "\t1)Apple"
echo -e "\t2)Orange"
echo -e "\t3)Banana"
输出:
[marc@localhost Shell]$ bash test.sh
Friut Shop
1)Apple
2)Orange
3)Banana
六、echo输出颜色设置——字体、背景等
脚本echo命令输出带颜色的设置,需要使用参数-e:
- 格式:echo -e “\033[字背景颜色;文字颜色m 字符串\033[0m”
字颜色:30—–37
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
字背景颜色范围:40—–47
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
最后面控制选项说明
\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 显示光标
七、基本输入——read命令
read命令:默认接受键盘的输入,包含多种命令选项:
- -p打印信息
- -t限定时间
- -s不显示
- -n输入字符个数
#!bin/bash
#--------------------------------------
# Author :
# Time :
# Description :
# Version :
#--------------------------------------
clear #清屏
#echo -n "Login: "
#read user #读取键盘输入,存入变量user中
read -p "Login: " user #打印字符串并读取键盘输入,存入变量user中
echo -n "Password: "
read -s -t10 -n6 pd #读取键盘输入(输入数据不显示,输入时间10s,最多输入6位数),存入变量pd中
echo #equal "\n"
echo "account: $user password: $pd"