shell提供了与操作系统OS之间的通讯方式。由于人不能直接操作硬件,所以用户可以通过shell程序来和计算机进行交互。首先用户将指令告诉shell,然后shell再传给内核,接着内核再去支配计算机做各种操作。
shell只是内核OS与外围之间的一层API
1、shell基础知识小结
(1)shell编程其中的运算符的意义是十分复杂的,这里需要精确记忆。可以说键盘上的每一个符号都有自己的含义与意义。学习过程中遇到的常用运算符总结如下:
! [ -f /ect/passwd ] && echo hello 取反
!20 运行历史命令的第20行的命令;
!! 上一条命令;
ctr+r 来搜索历史命令
!$ 取上一条命令的最后一个参数;
$AAA 取出变量名AAA的值;
* 任意多个任意字符;
echo *; //所有的文件;
echo [abc]*; //以abc开头的文件;
echo [^abc]; //不是以abc开头的文件 ;
[] 两边加" "可用来判断;
?? 任意的两个字符
{} touch {a,b,c}-{1,2,3}//创建9个文件,枚举;
& 把一个程序丢入后台;ls &
&& 与,同时为真
| 表示管道
|| 表示或
ll==ls -l 显示文件的权限,时间等;
~ 主目录:cd ~shrek cd ~[自己的主目录]
@ email
# 表示注释 #ls 不运行;
%1 后台的第一个任务;
^ 非[^abc]不是以abc开头的文件名;
()做一个函数;aaa();//执行的时候,直接输入aaa函数名即可;
( ls; cd /mnt ) 打包命令在子shell你执行。
''会屏蔽所有的特殊的字符的意义,只表示单纯的字符;
""表示普通的字符,只屏蔽普通的“ ”的作用,因为" "的作用是字符的结束;
= 赋值
[ 1-9 ]表示真假判断
例如[ -f /etc/passsword ]//文件存在不存在,真假判断;
0表示成功执行;1表示失败;这和C语言不一样;
-l 是否为连接;
-f 是否为文件;
-b 是否为bolck类型的设备文件;
-d 是否为目录;
-c 是否为字符型设备文件;
-x 是否可以执行;
-r 是否可读文件;
-w 是否可写;
在man bash里可以查找;
< >输入输出重定向;
$$ 进程的PID会自动显示出来;
$[2+3] 计算算术表达式的值;
$?上一条命令是否成功执行
$aa 取aa的值
(while true;do 'date');表示在子shell中执行该命令;
!!调用上一条命令;
!+数字表示第几行的某一个命令;
alias 设置别名,且总是优先执行。
unalias 取消别名。
例如:alias print="echo=aaaaa"
print//就可以了
unalias print //取消别名;
2、bash的定制
sh启动的顺序:
如果我们想定制自己的shell,那么可以在~/.bash_profile 和 ~/.bashrc里更改我们想要的属性。
etc/frofile则是对所有的用户有效。
3、修改用户或者系统的语言
这里我们只需要修改两个变量即可: LANG 和LC_ALL
如果是个人的语言设置:则在~/.bashrc文件里将上面的两个变量设置为:
4、如果添加的用户有的不能用ifconfig命令,这只是其中的一个小例子,我们可以一次类推。
这里可以在 /etc/profile文件里添加一个PATH变量:
set显示环境变量和普通变量 unset取消变量
shell只是内核OS与外围之间的一层API
1、shell基础知识小结
(1)shell编程其中的运算符的意义是十分复杂的,这里需要精确记忆。可以说键盘上的每一个符号都有自己的含义与意义。学习过程中遇到的常用运算符总结如下:
! [ -f /ect/passwd ] && echo hello 取反
!20 运行历史命令的第20行的命令;
!! 上一条命令;
ctr+r 来搜索历史命令
!$ 取上一条命令的最后一个参数;
$AAA 取出变量名AAA的值;
* 任意多个任意字符;
echo *; //所有的文件;
echo [abc]*; //以abc开头的文件;
echo [^abc]; //不是以abc开头的文件 ;
[] 两边加" "可用来判断;
?? 任意的两个字符
{} touch {a,b,c}-{1,2,3}//创建9个文件,枚举;
& 把一个程序丢入后台;ls &
&& 与,同时为真
| 表示管道
|| 表示或
ll==ls -l 显示文件的权限,时间等;
~ 主目录:cd ~shrek cd ~[自己的主目录]
# 表示注释 #ls 不运行;
%1 后台的第一个任务;
^ 非[^abc]不是以abc开头的文件名;
()做一个函数;aaa();//执行的时候,直接输入aaa函数名即可;
( ls; cd /mnt ) 打包命令在子shell你执行。
''会屏蔽所有的特殊的字符的意义,只表示单纯的字符;
""表示普通的字符,只屏蔽普通的“ ”的作用,因为" "的作用是字符的结束;
touch "a b";一个文件;
touch a b;两个文件;
``反引号里是一个命令,表示先执行该命 令;执行的结果再干其他的操作;
echo `which is`;先执行which is命令,再执行echo;
\脱义符,如何删除"a b"这个文件呢?如何创建以$开头的文件呢?
rm a\ b;就可以了。
touch \$;
;表示命令结束;echo;which is;
= 赋值
[ $USER = root ] && echo hello root
这里的=不是赋值,字符串相等,不是数值,加" "和不加都一样!
[1-9]表示这个位置是1,2,3....9这几个数;[ 1-9 ]表示真假判断
例如[ -f /etc/passsword ]//文件存在不存在,真假判断;
[ -d /proc/bus/usb ] && aa=1;//目录存不存在;
echo $?//得到上一个命令是否成功执行;
0表示成功执行;1表示失败;这和C语言不一样;
-l 是否为连接;
-f 是否为文件;
-b 是否为bolck类型的设备文件;
-d 是否为目录;
-c 是否为字符型设备文件;
-x 是否可以执行;
-r 是否可读文件;
-w 是否可写;
在man bash里可以查找;
< >输入输出重定向;
$$ 进程的PID会自动显示出来;
$[2+3] 计算算术表达式的值;
$?上一条命令是否成功执行
$aa 取aa的值
(while true;do 'date');表示在子shell中执行该命令;
!!调用上一条命令;
!+数字表示第几行的某一个命令;
alias 设置别名,且总是优先执行。
unalias 取消别名。
例如:alias print="echo=aaaaa"
print//就可以了
unalias print //取消别名;
2、bash的定制
sh启动的顺序:
/etc/profile //所有人,公用的;
/etc/profile.d/*.sh
~/.bash_profile//只对个人的文件;私有的;
~/.bashrc
/etc/bashrc// 所有的;
sh退出时执行的脚本: ~/.bash_logout
如果我们想定制自己的shell,那么可以在~/.bash_profile 和 ~/.bashrc里更改我们想要的属性。
etc/frofile则是对所有的用户有效。
3、修改用户或者系统的语言
这里我们只需要修改两个变量即可: LANG 和LC_ALL
如果是个人的语言设置:则在~/.bashrc文件里将上面的两个变量设置为:
LANG = "zh_CN.UTF-8"
LC_ALL="zh_CN.UTF-8"
如果要修改系统的语言则可以在/etc/sysconfig/i18n里修改以上变量。
4、如果添加的用户有的不能用ifconfig命令,这只是其中的一个小例子,我们可以一次类推。
这里可以在 /etc/profile文件里添加一个PATH变量:
PATH=$PATH:/sbin //这里只要包含以下sbin这个目录就可以了!
5、set和env的区别(非常重要)
set显示环境变量和普通变量 unset取消变量
env只显示环境变量
但是可以用export将普通变量转换为环境变量
因为普通变量只是在当前shell你有效,而shell在执行一个shell脚本的时候,刚好默认情况下都是打开一个子shell。